帮助解决一个简单的Android ListView问题

时间:2011-05-11 00:46:26

标签: java android arraylist android-listview

我是Android新手,所以这看起来像是一个基本问题。但我得到的是一个非常简单的类SingleItem,它有一个整数和一个String以及每个的getter和setter。在我的应用程序中,我得到了一个ArrayList,它包含一组SingleItem对象。我还有一个带有ListView小部件的布局。

我要做的是在SingleItem中使用我的String值填充ListView,但是当用户从ListView中选择一个项目时,我需要来自该SingleItem值的整数ID。我如何在Android开发中执行此操作?

2 个答案:

答案 0 :(得分:1)

如果您使用自己的适配器填充列表,那么在构建要返回的视图时,在getView()函数中,您可以在要返回的视图上调用setTag()并存储整个“SingleItem”对象。然后在您返回的视图的onClickListener中,您可以使用已单击的视图的getTag()方法检索您的信息。

编辑: 指定我指的是哪个onClickListener

答案 1 :(得分:0)

这里有一堆伪代码:创建自己的适配器。这样可以灵活地执行各种操作,但对您来说重要的是只显示自定义类中的相关字段并制作更复杂的列表视图。一个体面的教程在这里:http://developerlife.com/tutorials/?p=327

你必须处理baseadapter的其他覆盖,但关键是分配singleItem.getString()的值

public class SingleItemAdapter extends BaseAdapter{
    private ArrayList<SingleItem> m_items= new ArrayList<SingleItem>();
          private Context mContext;
          public SingleItemAdapter (Context c,ArrayList<SingleItem> items) {
        mContext = c;
        m_items= items;
    }
.
.
.

    @Override
    public Object getItem(int arg0) {
        return m_items.get(arg0);
    }

           @Override
    public View getView(int position, View convertView, ViewGroup parent) {

             View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.singleitemview, null);
        }
            SingleItem i=(SingleItem) getITem(position)
            if(v!=null){
                TextView tv=(TextView) v.findViewById(R.id.yourListItemView);
                tv.setText(i.getStringValue());
}

}
}

定义自定义适配器后,可以将其分配给列表视图并为OnItemSelectedListener分配侦听器。因为这会返回位置,所以可以将其绑定到SingleItems的ArrayList中的位置。

.
.
.
SingleItemAdapter sia=new SingleItemAdapter(this,yourArray);
yourArrayList.setAdapter(sia);
yourArrayList.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
    public void onItemSelected(AdapterView<?> parent, View v, int position, long row) {
          SingleItem si= yourArray.getItem(position);
           //do something with si.getValue();

}

.
.
.

});