我目前正在为 Android 创建一个基本的新闻聚合器应用程序,到目前为止,我已经设法创建了多个由此派生的 HorizontalListViews:http: //www.dev-smart.com/archives/34
我正在解析来自实时 JSON 对象和数组的所有数据。
这个过程是这样的:
1) 启动应用程序
2) 获取一个 JSON 文件,其中列出了要显示的所有提要
3) 解析提要标题和文章链接,将每个链接添加到数组
中 4) 从数组中获取提要数量并为每个提要创建单独的 HorizontalListView。即“爱尔兰时报”。5)在创建期间将BaseAdapter“mAdapter”应用于每个HorizontalListView。
我的 baseadapter 负责通过获取每个标题和缩略图来填充我的 HorizontalListViews。
然而,我的问题是我所有的提要似乎都包含相同的文章和缩略图。现在我只是 Android 的新手,所以我不能 100% 确定这里出了什么问题。请参阅下面的屏幕截图。
我是否需要为每个 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,因为我认为它在调用后立即填充列表视图,但我看起来好像 BaseAdaptor 只能调用一次,我真的不知道。
我想动态填充提要,但不必为每个 HorizontalListView 手动创建一个新的适配器。
任何帮助将非常感激。