ListView onitemclick

问题描述

| 我正在使用arrayadapter在列表视图中显示图片以及标题和描述
lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,lv_arr));*/
    m_orders = new ArrayList<Order>();

    this.m_adapter = new OrderAdapter(this,R.layout.row,m_orders);
   final ListView  lv1=(ListView)findViewById(R.id.list);
  lv1.setAdapter(this.m_adapter);
  lv1.setTextFilterEnabled(true);
现在我想onclick来获得标题 我尝试这个,但它显示奇怪的字符 编辑:这是我的课: 私有类OrderAdapter扩展了ArrayAdapter {
    private ArrayList<Order> items;

    public OrderAdapter(Context context,int textViewResourceId,ArrayList<Order> items) {
            super(context,textViewResourceId,items);
            this.items = items;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row,null);
            }
            Order o = items.get(position);
            if (o != null) {
                    TextView tt = (TextView) v.findViewById(R.id.toptext);
                    TextView bt = (TextView) v.findViewById(R.id.bottomtext);
                    if (tt != null) {
                          tt.setText(\"Name: \"+o.getorderName());                            }
                    if(bt != null){
                          bt.setText(\"Status: \"+ o.getorderStatus());
                    }
            }
            return v;
    }
}


lv1.setonItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> a,View v,int position,long id) {
      AlertDialog.Builder adb=new AlertDialog.Builder(ListViewExampleActivity.this);
      adb.setTitle(\"The Selected Item\");
      //lv1.getItemAtPosition(position)
      adb.setMessage(\"Selected Item is = \"+ lv1.getItemAtPosition(position).toString());
      adb.setPositiveButton(\"Ok\",null);
      adb.show();
      }
      }); 
所以我如何指定要显示的项目,如arraylist(0,1)... 问候...     

解决方法

        您将两个适配器设置为相同的
ListView
:首先是
ArrayAdapter<String>
,然后是
OrderAdapter
(但是您要定义它) 由于最后一个是
OrderAdapter
,因此
getItemAtPosition (position);
将检索the7ѭ(或在该适配器中使用的任何对象)的实例,而不是String。最有可能的是,该类未覆盖
toString()
,因此您将检索到常规
Object#toString()
响应:
 public String toString ()
由于:API级别1   返回一个字符串,其中包含该对象的简明易懂的描述。鼓励子类重写此方法,并提供考虑对象的类型和数据的实现。默认实现等效于以下表达式:
getClass().getName() + \'@\' + Integer.toHexString(hashCode())
     如果您打算实现自己的toString方法,请参见编写有用的toString方法。   返回此对象的可打印表示形式。 编辑:要澄清一点我的答案:问题不在侦听器内。看起来不错。您将需要研究如何设置适配器以及如何(如果)定义任何类。例如,创建您自己的toString()方法以返回任何有意义的字符串。 根据您的更新:如果我没记错的话,您要做的是:
adb.setMessage(\"Selected Item is = \"+ lv1.getItemAtPosition(position).getOrderName());
    ,        代替     lv1.getItemAtPosition(position).toString() 尝试     a.getItemAtPosition(position).toString()