ListView onitemclick

时间:2011-06-12 23:34:36

标签: java android listviewitem

我使用arrayadapter

在listview图片和标题及说明中显示
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)... 问候...

2 个答案:

答案 0 :(得分:4)

您正在为同一个ListView设置两个适配器:首先是ArrayAdapter<String>,然后是OrderAdapter(但是您定义了它)

由于最后一个是OrderAdaptergetItemAtPosition (position);检索class Order的实例(或您在该适配器中使用的任何内容)而不是String。最有可能的是,该类不会覆盖toString(),因此您会检索常规Object#toString()响应:

 public String toString ()

自:API Level 1

  

返回一个字符串,其中包含此对象的简洁,可读的描述。鼓励子类重写此方法并提供考虑对象类型和数据的实现。默认实现等效于以下表达式:

getClass().getName() + '@' + Integer.toHexString(hashCode())
     

如果您打算实现自己的toString方法,请参阅编写有用的toString方法。   返回此对象的可打印表示形式。

编辑:澄清一点我的答案:问题不在听众中。看起来很好。您需要了解如何设置适配器以及如何(如果)定义任何类。例如,创建自己的toString()方法以返回任何有意义的字符串。

根据您的更新:如果我没弄错的话,您要做的是:

adb.setMessage("Selected Item is = "+ lv1.getItemAtPosition(position).getOrderName());

答案 1 :(得分:0)

而不是     lv1.getItemAtPosition(位置)的ToString() 尝试     a.getItemAtPosition(位置)的ToString()