0

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

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

这个过程是这样的:

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

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

然而,我的问题是我所有的提要似乎都包含相同的文章和缩略图。现在我只是 Android 的新手,所以我不能 100% 确定这里出了什么问题。请参阅下面的屏幕截图。

我是否需要为每个 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,因为我认为它在调用后立即填充列表视图,但我看起来好像 BaseAdaptor 只能调用一次,我真的不知道。

我想动态填充提要,但不必为每个 Horizo​​ntalListView 手动创建一个新的适配器。

任何帮助将非常感激。

在此处输入图像描述

4

1 回答 1

0

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

于 2013-01-31T15:23:03.133 回答