2013-07-30 79 views
0

我无法使用波纹管代码访问项目的内容。为什么?我究竟做错了什么?Android从自定义列表视图中访问textView项目

  • 我为ListView
  • 的物品的自定义布局的活动是一个简单的,不ListActivity
  • 在ItemLayout我有3个TextViews也许图像。
  • 项目点击我需要检索在这些TextView中找到的值。

那么可能是我的问题? 下面是代码:

listView1.setOnItemClickListener(new OnItemClickListener() 
    { 
      public void onItemClick(AdapterView<?> arg0, View v, int position, long id) 
      { 
       AlertDialog.Builder adb = new AlertDialog.Builder(
       MainActivity.this); 
       adb.setTitle("ListView OnClick"); 
      RelativeLayout rl = (RelativeLayout) v.getParent(); 
      TextView titlu = (TextView) rl.findViewById(R.id.txtTitle); 
        rl.findViewById(R.id.txtLocalitate); 
      adb.setMessage("Selected = "+ titlu.getText().toString()); 
      adb.setPositiveButton("Ok", null); 
      adb.show(); 
     } 
    }); 

如果我做

RelativeLayout rl = (RelativeLayout) arg0.getParent(); 

然后我没有收到上点击一个错误,但在AlertDialog显示的值只显示第一个项目的价值。所以这不是要走的路... 如果我离开代码如上,onItemClick我收到“强制关闭”错误。错误日志可波纹管:

07-30 18:36:09.903: W/dalvikvm(1304): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
07-30 18:36:09.914: E/AndroidRuntime(1304): FATAL EXCEPTION: main 
07-30 18:36:09.914: E/AndroidRuntime(1304): java.lang.ClassCastException: android.widget.ListView 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at softwarex.mycostomlistview.MainActivity$1.onItemClick(MainActivity.java:50) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.widget.ListView.performItemClick(ListView.java:3513) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.os.Handler.handleCallback(Handler.java:587) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.os.Looper.loop(Looper.java:123) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-30 18:36:09.914: E/AndroidRuntime(1304):  at dalvik.system.NativeStart.main(Native Method) 

回答

0

它看起来像这个问题是在这里:

RelativeLayout rl = (RelativeLayout) v.getParent(); 

假设你的列表项是基于RelativeLayout,则v你要找的RelativeLayout的因为,而不是它的父母。试试这个:

RelativeLayout rl = (RelativeLayout) v; 

*假设它确实一个RelativeLayout。如果您有混合/多样的列表项目,请确保您有某种方式将它们分开,否则您将得到另一个ClassCastException

+0

谢谢。它做到了。 – user1137313

0

您试图将您的AdapterView(在这种情况下,我认为是一个ListView)转换为RelativeLayout,因此抛出ClassCastException。 v是点击发生的视图,这是你必须使用TextView的。因此,而不是

RelativeLayout rl = (RelativeLayout) v.getParent(); 

你应该使用

RelativeLayout rl = (RelativeLayout)v; 
相关问题