私は現在、Android 用の基本的なニュース アグリゲーター アプリを作成しています。
ライブの JSON オブジェクトと配列からすべてのデータを解析しています。
プロセスは次のようになります。
1) アプリを起動
します 2) 表示するすべてのフィードを一覧表示する JSON ファイルを取得します
3) フィードのタイトルと記事のリンクを解析し、それぞれを配列に追加します
4) 配列からフィードの数を取得し、それぞれに個別の HorizontalListView を作成します。つまり、「アイリッシュ タイムズ」です。5) 作成中に各 HorizontalListView に BaseAdapter "mAdapter" を適用します。
私の baseadapter は、各タイトルとサムネイルを取得して、HorizontalListViews を設定する責任があります。
しかし、私の問題は、すべてのフィードに同じ記事とサムネイルが含まれているように見えることです。今、私は Android を初めて使用するので、ここで何が問題なのか 100% 確信が持てません。以下のスクリーンショットを参照してください。
HorizontalListview ごとに新しい BaseAdaptor を作成する必要がありますか、それとも同じものを使用してすべてのリストビューに一意のデータを入力できますか?
私が何を意味するかを説明するのに役立つコードを次に示します。
1) JSON データを取得して解析し、フィードの数を取得して各 HorizontalListView を作成する 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 メソッド。HorizontalListView を作成し、アダプタを適用するために使用されます。
//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 は現在、それを呼び出した最後の HorizontalListView からの記事を表示しています。
現在、各 ListView に同じ BaseAdaptor を使用していますが、呼び出されるとすぐにリストビューにデータが入力されると考えていましたが、BaseAdaptor は 1 回しか呼び出せないように見えますが、本当にわかりません。
ただし、Horizo ntalListViewごとに新しいアダプターを手動で作成する必要はありません。
どんな助けでも大歓迎です。