我目前正在为Android创建一个基本的新闻聚合器应用程序,到目前为止,我已设法创建多个源自此的HorizontalListView:http://www.dev-smart.com/archives/34
我正在解析来自实时JSON对象和数组的所有数据。
这个过程是这样的:
1)启动应用程序
2)抓取一个JSON文件,列出要显示的所有Feed
3)解析Feed标题和文章链接,将每个标题添加到数组中
4)从数组中获取数量,并为每个数据创建单独的HorizontalListView。即“爱尔兰时报”。
5)在创建期间将BaseAdapter“mAdapter”应用于每个HorizontalListView。
我的baseadapter负责通过获取每个标题和缩略图来填充我的HorizontalListViews。
然而,我的问题是我的所有Feed似乎都包含相同的文章和缩略图。现在我只是Android的新手所以我不是百分之百确定这里出了什么问题。见下面的截图。
我是否需要为每个HorizontalListview创建一个新的BaseAdaptor,或者我可以使用相同的一个来用我的列表视图填充唯一数据。
这里有一些代码可以帮助解释我的意思:
1)OnCreate方法获取JSON数据,解析它,获取数量并创建每个HorizontalListView
@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,因为我认为它一旦被调用就填充了listview,但我看起来好像BaseAdaptor只能被调用一次,我真的不知道。
我想动态填充供稿,而无需为每个HorizontalListView手动创建新的适配器。
非常感谢任何帮助。
答案 0 :(得分:0)
所以...你在4列表视图中得到了相同的信息,对吧?在这种情况下,您只需要一个adapter填充4列表视图。 适配器只提供在那一刻可见的视图到listview(如果以正确的方式实现),因此如果包含的信息相同,您可以重用适配器。