2011-06-12 69 views
1

我在我的列表视图画面和标题和描述正在显示使用arrayadapter的ListView onitemclick

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拿到冠军

我试试这一个,但它显示奇怪的字符

编辑:这是我的课程:

private class OrderAdapter extends 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)... 关于哪些项目......

回答

0

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

4

要设置两个适配器相同的ListView:首先一个ArrayAdapter<String>,然后一个OrderAdapter(但是你定义)

由于最后一个是OrderAdapter,因此getItemAtPosition (position);将检索class Order(或您在该适配器中使用的任何内容)的实例,而不是字符串。最可能的是,那类没有重载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()); 
+0

感谢您的回答,acctually这是我orderadapter类: – Tamer 2011-06-13 13:20:42