关于活动中的列表视图 - android

时间:2013-08-01 08:09:31

标签: android android-listview

我正在制作一种大型应用程序,它主要包含3个活动和ListView组件。

  

MainActivity - > FirstActivity并返回

     

MainActivity - > SecondActivty并返回

这三个人都有ListView组件,列出了他们特定的列表视图项。

  

我有一个名为MyMachine的Singleton类,它包含所有属性   里面的机器和其中一些是主要的计算   活动已创建。

我想要实现的目标这里列出了Main,First和Second活动中机器的所有相关属性。它就像在3组中对同一事物的属性进行分类。

我遇到的问题是:

我希望每个ListView项上都有一个click事件。但是监听器给了我ListView项的整数键,这意味着机器的每个属性都需要用某个整数键映射。但是,如果FirstActivity的第1项是Main活动的第0项,则单击时会打印错误的值。

有更好的方法吗?

基本上,当在所有活动中单击ListView项时,如何映射字符串值并在对话框窗口中正确显示它们。我可以为这个目的开发函数,但是有一个更简单的方法:)

1 个答案:

答案 0 :(得分:1)

ListView使用Adapter显示数据(通常使用BaseAdapterSimpleAdapterArrayAdapter等其中一种实现。

Adapter类保存对要显示的项的引用,并且还有一个特殊方法getItemId(int position),它必须返回ListView中某个位置的项的ID。

所以,假设我们有Item类:

public class Property{
  public final long id;
  public final String name;
  public final long price;

  public Property(long id, String name, long price){
    this.id = id;
    this.name = name;
    this.price = price;
  }
}

映射到某些数据库记录:

| _id | name | price |
|-----|------|-------|
|  1  | abcd |  123  |
|  2  | efgh |  456  |

然后,我们可以使用ArrayAdpaterProperty中显示一组ListView项:

public class PropertyAdapter extends ArrayAdapter<Property>{

    public PropertyAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public long getItemId(int position) {
        return getItem(position).id;
    }

}

你可以获得项目的ID:

  ListView listView = <some list view>;
  PropertyAdapter propertyAdapter = < adapter for list view >;

  listView.setAdapter(propertyAdapter);

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
           int itemId = propertyAdapter.getItemId(i);
           //-- this item Id is same as returned by getItemId(), 
           //-- which is id field of Property class
           //-- which is id column in database
        }
  });