Android IllegalStateException:无法执行活动的方法-发生了什么问题?

Android IllegalStateException:无法执行活动的方法-发生了什么问题?,android,listview,illegalstateexception,Android,Listview,Illegalstateexception,我正在尝试创建一个列表视图,其中包含多个可单击布局的项目。在此上下文中,listview是联系人列表。listview中的每一行代表一个单独的联系人,listview项上的每个按钮都应触发与该联系人相关的操作,例如查看和预订约会 每个listview项的XML: <LinearLayout android:id="@+id/layoutBookAppt" android:layout_width="56dp" android:layout_height="fill_

我正在尝试创建一个列表视图,其中包含多个可单击布局的项目。在此上下文中,listview是联系人列表。listview中的每一行代表一个单独的联系人,listview项上的每个按钮都应触发与该联系人相关的操作,例如查看和预订约会

每个listview项的XML:

<LinearLayout
    android:id="@+id/layoutBookAppt"
    android:layout_width="56dp"
    android:layout_height="fill_parent"
    android:layout_alignBottom="@+id/divider"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="vertical"
    android:background="@drawable/list_selector_flatcolour"
    android:onClick="newAppt" >
    <ImageView
        android:id="@+id/apptNew"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/appt_new" />
</LinearLayout>

<RelativeLayout
    android:id="@+id/layoutInfo"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:padding="8dp"
    android:layout_toStartOf="@id/layoutBookAppt"
    android:layout_toLeftOf="@id/layoutBookAppt"
    android:onClick="viewCustomer"
    android:background="@drawable/list_selector_flatcolour" >

    <!-- Various contact information here, name, number etc -->
</RelativeLayout>
logcat中的异常:

09-26 09:37:38.070: E/AndroidRuntime(766): FATAL EXCEPTION: main
09-26 09:37:38.070: E/AndroidRuntime(766): java.lang.IllegalStateException: Could not execute method of the activity
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$1.onClick(View.java:3704)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View.performClick(View.java:4232)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$PerformClick.run(View.java:17298)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Handler.handleCallback(Handler.java:615)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Looper.loop(Looper.java:137)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.app.ActivityThread.main(ActivityThread.java:4921)
09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:511)
09-26 09:37:38.070: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
09-26 09:37:38.070: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
09-26 09:37:38.070: E/AndroidRuntime(766):  at dalvik.system.NativeStart.main(Native Method)
09-26 09:37:38.070: E/AndroidRuntime(766): Caused by: java.lang.reflect.InvocationTargetException
09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:511)
09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$1.onClick(View.java:3699)
09-26 09:37:38.070: E/AndroidRuntime(766):  ... 11 more
09-26 09:37:38.070: E/AndroidRuntime(766): Caused by: java.lang.NullPointerException
09-26 09:37:38.070: E/AndroidRuntime(766):  at com.example.myapp.CustListActivity.newAppt(CustListActivity.java:110)
09-26 09:37:38.070: E/AndroidRuntime(766):  ... 14 more
因此,基本上我想做的是,当用户按下listview项时,能够获得两位信息

  • 行位置
  • 按下的布局
  • 我可以单独获得这些细节,但要同时获得这两个细节却很困难。我可以通过XML触发单独的onClick事件,但无法确定如何找到按下的行的位置。我还可以通过设置一个
    onItemClickListener
    来获取行位置,但这仅在按下列表项本身时触发,而不会触发其中的任何视图

    使用我的
    newAppt()
    viewCustomer()
    函数,我试图使用
    getTag()
    获取行位置(我不确定这是否是最好的方法,但我正在尝试任何方法)-但是
    getTag()
    总是返回null,这让我完全不知所措

    我走对了吗?如果不是,那么获取行和被按下的视图的最佳方法是什么


    (编辑:
    Gen.popup
    是我自己的土司速记方法)。

    替换下面的代码

    ViewHolder vh = (ViewHolder)view.getTag();
    


    这一行为您提供了单击的位置。

    您正在将
    @+id/layoutBookAppt
    布局设置为
    newAppt
    方法的
    onClick
    属性。在那里,
    getTag()
    确实是空的。但它与ListView子视图的标记不同。这是
    LinearLayout
    的标记


    所以你在做一些毫无意义的事。。。我的回答是另一个问题:你打算用这个方法做什么?

    发布你的logcat输出。@JiteshDalsaniya EditedLogcat对你很好:
    引起的原因:java.lang.NullPointerException
    com.example.myapp.CustListActivity.newAppt(CustListActivity.java:110)
    那么谁是
    Gen
    ?因为它似乎是空的
    Gen.popup()。编辑了这个问题。之前,我尝试了
    int pos=listview.getPositionForView(view)
    ,但当视图开始回收时,它返回了错误的位置。但是将
    视图更改为
    视图.getParent()
    效果惊人!非常感谢,这就是我想要的:)
    但它不是ListView子视图的相同标记。这是LinearLayout的标签。
    09-26 09:37:38.070: E/AndroidRuntime(766): FATAL EXCEPTION: main
    09-26 09:37:38.070: E/AndroidRuntime(766): java.lang.IllegalStateException: Could not execute method of the activity
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$1.onClick(View.java:3704)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View.performClick(View.java:4232)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$PerformClick.run(View.java:17298)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Handler.handleCallback(Handler.java:615)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Handler.dispatchMessage(Handler.java:92)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.os.Looper.loop(Looper.java:137)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.app.ActivityThread.main(ActivityThread.java:4921)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:511)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at dalvik.system.NativeStart.main(Native Method)
    09-26 09:37:38.070: E/AndroidRuntime(766): Caused by: java.lang.reflect.InvocationTargetException
    09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:511)
    09-26 09:37:38.070: E/AndroidRuntime(766):  at android.view.View$1.onClick(View.java:3699)
    09-26 09:37:38.070: E/AndroidRuntime(766):  ... 11 more
    09-26 09:37:38.070: E/AndroidRuntime(766): Caused by: java.lang.NullPointerException
    09-26 09:37:38.070: E/AndroidRuntime(766):  at com.example.myapp.CustListActivity.newAppt(CustListActivity.java:110)
    09-26 09:37:38.070: E/AndroidRuntime(766):  ... 14 more
    
    ViewHolder vh = (ViewHolder)view.getTag();
    
    final int position = listview.getPositionForView((View) view.getParent());