如何在运行时以编程方式将项目添加到水平列表?

时间:2015-01-08 11:51:17

标签: c# android xamarin xamarin.android xamarin-studio

我一直在寻找水平列表视图。我还没找到一个。但我确实在谷歌Android网站上找到了网格视图(水平显示图像)。 [请参阅此页面的bottom以获取屏幕截图]。

问题是,我没有使用Java。我正在使用C#/ Monodroid / Xamarin Studio。

我没有使用图片。我需要显示正确的列表项(例如,某种类型的面板或类似div的东西,其中包含一个小标题和每个列表项下面的描述),并在GridView中水平显示所有这些列表项。

我不知道应该使用哪个适配器。我想我应该使用ArrayAdapter,因为它是我见过的唯一符合我想做的适配器。

此外,我发现99%的在线教程并没有真正解释如何在运行时动态地将项目添加到水平列表视图/网格视图中。他们似乎都使用静态字符串数组/ xml文件作为其数据项的来源。

所以我的问题是,如何创建一个水平滚动列表(无论是GridView还是其他东西)并在运行时以编程方式向其添加项目?

如果我没有清楚地描述这一点,那么它应该如何:

Horizontal List Item Demonstration

1 个答案:

答案 0 :(得分:1)

ArrayAdapter的{​​p> Check the API,尤其是addAllinsert(Object,index)

等方法

您的HorizontalListView有一个(在您的情况下)ArrayAdapter有一个数据源。要更改您的数据

  1. Adapter
  2. 中更改数据源
  3. Adapter必须通过ListView通知notifyDataSetChanged()(您必须自己调用notifyDataSetChanged!否则,ListView将不会更新其内容)
  4. ListView将更新其内容
  5. Adapter内:

    Array<YourObject> dataSource;
    
    //...
    
    //Either override existing method
    @Override
    public void add(YourObject newItem) {
        dataSource.add(newItem);
        notifyDataSetChanged();
    }
    
    //write an own one
    public void updatedata(Array<YourObject> newItems){
        //add your custom logic by manipulating the dataSource array yourself
    
        //for example: change everything
        self.dataSource = newItems;
        notifyDataSetChanged();
    }
    

    并在您的ArrayAdapter中调用它

    myAdapter.updatedata(Array<YourObject>)
    

    如果您没有

    参考,请从ListView获取适配器
    ((YourCustomArrayAdapter)yourListView.getAdapter).updatedata(Array<YourObject>)
    

    而且只是为了记录,如果你的适配器应该被包裹,做这个疯狂的狗屎..这花了我一些时间。

    (
        (
            YourCustomArrayAdapter (HeaderViewListAdapter)yourListView.getAdapter()
        ).getWrappedAdapter()
    ).updatedata(Array<YourObject>);
    

    希望它有所帮助。花一些时间,直到我理解我的代码。那段时间我心情非常好,D