Android BaseAdapters&多个Listviews

时间:2013-01-30 21:19:04

标签: java android listview android-listview adapter

我目前正在为Android创建一个基本的新闻聚合器应用程序,到目前为止,我已设法创建多个源自此的Horizo​​ntalListView:http://www.dev-smart.com/archives/34

我正在解析来自实时JSON对象和数组的所有数据。

这个过程是这样的:

1)启动应用程序
2)抓取一个JSON文件,列出要显示的所有Feed 3)解析Feed标题和文章链接,将每个标题添加到数组中 4)从数组中获取数量,并为每个数据创建单独的Horizo​​ntalListView。即“爱尔兰时报”。 5)在创建期间将BaseAdapter“mAdapter”应用于每个Horizo​​ntalListView。

我的baseadapter负责通过获取每个标题和缩略图来填充我的Horizo​​ntalListViews。

然而,我的问题是我的所有Feed似乎都包含相同的文章和缩略图。现在我只是Android的新手所以我不是百分之百确定这里出了什么问题。见下面的截图。

我是否需要为每个Horizo​​ntalListview创建一个新的BaseAdaptor,或者我可以使用相同的一个来用我的列表视图填充唯一数据。

这里有一些代码可以帮助解释我的意思:

1)OnCreate方法获取JSON数据,解析它,获取数量并创建每个Horizo​​ntalListView

@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,因为我认为它一旦被调用就填充了listview,但我看起来好像BaseAdaptor只能被调用一次,我真的不知道。

我想动态填充供稿,而无需为每个Horizo​​ntalListView手动创建新的适配器。

非常感谢任何帮助。

enter image description here

1 个答案:

答案 0 :(得分:0)

所以...你在4列表视图中得到了相同的信息,对吧?在这种情况下,您只需要一个adapter填充4列表视图。 适配器只提供在那一刻可见的视图到listview(如果以正确的方式实现),因此如果包含的信息相同,您可以重用适配器。