0

私は現在、Android 用の基本的なニュース アグリゲーター アプリを作成しています

ライブの JSON オブジェクトと配列からすべてのデータを解析しています。

プロセスは次のようになります。

1) アプリを起動
します 2) 表示するすべてのフィードを一覧表示する JSON ファイルを取得します
3) フィードのタイトルと記事のリンクを解析し、それぞれを配列に追加します
4) 配列からフィードの数を取得し、それぞれに個別の Horizo​​ntalListView を作成します。つまり、「アイリッシュ タイムズ」です。5) 作成中に各 Horizo​​ntalListView に BaseAdapter "mAdapter" を適用します。

私の baseadapter は、各タイトルとサムネイルを取得して、Horizo​​ntalListViews を設定する責任があります。

しかし、私の問題は、すべてのフィードに同じ記事とサムネイルが含まれているように見えることです。今、私は Android を初めて使用するので、ここで何が問題なのか 100% 確信が持てません。以下のスクリーンショットを参照してください。

Horizo​​ntalListview ごとに新しい BaseAdaptor を作成する必要がありますか、それとも同じものを使用してすべてのリストビューに一意のデータを入力できますか?

私が何を意味するかを説明するのに役立つコードを次に示します。

1) JSON データを取得して解析し、フィードの数を取得して各 Horizo​​ntalListView を作成する OnCreate メソッド

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.listviewdemo);

    //--------------------JSON PARSE DATA------------------
    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    String json = jParser.getJSONFromUrl(sourcesUrl);

    //Parse feed titles and article list
    getFeeds(json); 

    //Create Listviews
    for(int i = 0; i < feedTitle.size()-1; i++){
        //getArticleImage(i);
        addHorzListView(i);
        articleArrayCount++;//Used to mark feed count for adaptor to know which array position to look at and retrieve data from.
     //Each array position i.e. [1] represents a HorizontalListview and its related articles 
    }   

} 

2) addHorzListView メソッド。Horizo​​ntalListView を作成し、アダプタを適用するために使用されます。

//Method used to dynamically add HorizontalListViews
public void addHorzListView(int count){
    LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout);  
    View view = getLayoutInflater().inflate(R.layout.listview, mainLayout,false);

    //Set lists header name
    TextView header = (TextView) view.findViewById(R.id.header);
    header.setText(feedTitle.get(count));

    //Create individual listview
    HorizontalListView listview = (HorizontalListView) view.findViewById(R.id.listviewReuse);
    listview.setAdapter(mAdapter);

    //add listview to array list
    listviewList.add(listview); 


    mainLayout.addView(view, count);    
}

3) Baseadaptor 自体:

private BaseAdapter mAdapter = new BaseAdapter() {

    private OnClickListener mOnButtonClicked = new OnClickListener() {

        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(HorizontalListViewDemo.this);
            builder.setMessage("hello from " + v);
            builder.setPositiveButton("Cool", null);
            builder.show();

        }
    };

    @Override
    public int getCount() {
        return noOfArticles.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

//Each listview is populated with data here
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View retval = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewitem, null);
        TextView title = (TextView) retval.findViewById(R.id.title);
        title.setText(getArticleTitle(position));
        new DownloadImageTask((ImageView) retval.findViewById(R.id.ImageView01)) .execute(getArticleImage(position));
        Button button = (Button) retval.findViewById(R.id.clickbutton);
        button.setOnClickListener(mOnButtonClicked);


        return retval;
    }

};

アダプター mAdapter は現在、それを呼び出した最後の Horizo​​ntalListView からの記事を表示しています。

現在、各 ListView に同じ BaseAdaptor を使用していますが、呼び出されるとすぐにリストビューにデータが入力されると考えていましたが、BaseAdaptor は 1 回しか呼び出せないように見えますが、本当にわかりません。

ただし、Horizo​​ ntalListViewごとに新しいアダプターを手動で作成する必要はありません。

どんな助けでも大歓迎です。

ここに画像の説明を入力

4

1 に答える 1

0

それで... 4つのリストビューで同じ情報を取得しましたよね? その場合、4 つのリストビューを設定する 1 つのアダプタのみが必要です。アダプターは、その瞬間に表示されるビューをリストビューに提供するだけなので (正しい方法で実装されている場合)、含まれている情報が同じであればアダプターを再利用できます。

于 2013-01-31T15:23:03.133 に答える