1

我有一个ListView。每行ListView包含 2 TextView

我已经实现setOnItemClickListener如下ListView

list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

            // String item = list.getItemAtPosition(position).toString();
            TextView item =(TextView)list.getItemAtPosition(position);
        }});

但它给了我'ClassCastException'如下:

java.lang.ClassCastException: java.lang.Integer
at com.idealake.lic.Activities.PlansActivity$1.onItemClick(PlansActivity.java:62)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)

我的疑问是:

  • 如何检索行TextView内当前的内容ListView
  • 在检索数据时如何区分 1stTextView和 2nd ?TextView

任何帮助表示赞赏。

4

4 回答 4

3

使用findViewbyId()

代替,

   TextView item =(TextView)list.getItemAtPosition(position);

尝试这个,

   TextView item =(TextView)list.findViewbyId(R.id.textviewID);

如果您发现这不起作用,那么只需像这样尝试使用您的视图对象,

  TextView item =(TextView)view.findViewbyId(R.id.textviewID);

Bcoz 在 ItemCLick 侦听器上,将为您提供您尝试引用的视图中的确切元素。所以你不需要在这里再次使用位置来找到你的TextView。

于 2012-06-16T12:27:41.373 回答
2

优化方式是::

TextView textview1 =(TextView)view.findViewById(R.id.textview1);
                              ^^^^
TextView textview2 =(TextView)view.findViewById(R.id.textview2);
于 2012-06-16T12:30:02.793 回答
2

你可以setTag(id, value)在你的getView()getTag(id)onItemClick().

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

    convertView = getLayoutInflater().inflate(R.layout.xxx, null);
    TextView mTextView1 = (TextView) convertView .findViewById(R.id.txt1);
    TextView mTextView2 = (TextView) convertView .findViewById(R.id.txt2);

    convertView.setTag(R.id.txt1, mTextView1);
    convertView.setTag(R.id.txt2, mTextView2);
    return convertView;
}

在你的 List 的 Click 监听器中这样做

list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        TextView mTextView1 =(TextView)view.getTag(R.id.txt1);
        TextView mTextView2 =(TextView)view.getTag(R.id.txt2);
    }});
于 2012-06-16T12:27:30.063 回答
1
list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

            TextView item =(TextView)view.findViewById(R.id.textview1);
            TextView item =(TextView)view.findViewById(R.id.textview2);

        }});
于 2012-06-16T12:38:29.717 回答