2014-07-09 107 views
-1

我使用ArrayAdapter类型String自定义布局而不是android.R.layout.simple_list_item_1,但是当我点击列表项,然后我的应用程序崩溃。 这是我的logcat。Listview onClickItem函数不能正常工作

07-09 20:48:35.549: E/AndroidRuntime(1822): FATAL EXCEPTION: main 
07-09 20:48:35.549: E/AndroidRuntime(1822): java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at com.faisalahsan.healthdroid.DoctorCategoryListActivity$1.onItemClick(DoctorCategoryListActivity.java:55) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.widget.AbsListView.performItemClick(AbsListView.java:1066) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2522) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.widget.AbsListView$1.run(AbsListView.java:3182) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.os.Handler.handleCallback(Handler.java:605) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.os.Looper.loop(Looper.java:137) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
07-09 20:48:35.549: E/AndroidRuntime(1822):  at dalvik.system.NativeStart.main(Native Method) 

这是我的活动代码。

public class DoctorCategoryListActivity extends ListActivity { 

    private ListView mListView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_doctor_category_list); 

     String[] doctorCategories = {"Acupuncturist", "Addiction Specialist"}; 

     mListView = (ListView) findViewById(android.R.id.list); 
     mListView = getListView(); 

     ArrayAdapter<String> mAdapte = new ArrayAdapter<String>(DoctorCategoryListActivity.this, 
     R.layout.layout_doctor_catagory_list_item, R.id.tv_doctor_catagory_list_item, doctorCategories); 

       mListView.setAdapter(mAdapte); 

     mListView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) {      
         // selected item 
        String speciality = ((TextView) view).getText().toString(); 
         Toast.makeText(DoctorCategoryListActivity.this, speciality+" clicked", Toast.LENGTH_SHORT).show(); 

       } 
      }); 
     } 
    } 

这里是在onclickitem梅索德XML代码layout_doctor_catagory_list_item

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


    <TextView 
     android:id="@+id/tv_doctor_catagory_list_item" 
     android:layout_width="match_parent" 
     android:layout_height="43dp" 
     android:text="Test" 
     android:textSize="18sp" 
     android:gravity="center_vertical|left" 
     android:layout_marginLeft="10dp"   
     android:layout_marginTop="5dp"/> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="0.5dp" 
     android:layout_marginLeft="10dp" 
     android:background="@android:color/darker_gray"/> 

</LinearLayout> 
+0

提供您的DoctorCategoryListActivity –

+0

的代码我会检查以确保您已经实现了正确的接口,它将是View.OnItemClickListener。错误表示您有投射问题。 – Eenvincible

+3

你正在执行无效转换,很可能你混淆了你的'Views'的id:java.lang.ClassCastException:android.widget.LinearLayout不能转换为android.widget.TextView' –

回答

1

你应该使用:

TextView tv = (TextView)view.findViewById(R.id.tv_doctor_catagory_list_item); 
String speciality = tv.getText().toString(); 

传递给onItemClick()的观点是鉴于项目的布局(即在layout_doctor_catagory_list_item.xmlLinearLayout)而您提供的资源ID标识其中的TextView

0

你应该做view.findViewById(Textview)而不是((TextView) view).getText().toString();您在梅索德onItemClick收到的观点是,你在ArrayAdapters构造函数传递的整个ListView项。在你的情况下,整个观点是

LinearLayout 
----TextView 
----View(Spacer)