Android无法从ListView行中的按钮onClick中找到方法

Pan*_*nos 5 android listview onclick button

我有一个从自定义适配器填充的ListView.每行中都有1个按钮.在xml中,按钮具有传递的onClick属性.我只有xml,而不是任何OnClickListeners集.另请注意,我的CustomActivity中存在public void myMethod(View v).我得到以下异常

10-02 03:01:46.463: E/AndroidRuntime(26857): java.lang.IllegalStateException: Could not find a method myClickHandler(View) in the activity class **android.app.Application** for onClick handler on view class android.widget.Button with id 'myButton'
Run Code Online (Sandbox Code Playgroud)

活动方法:

public void myClickHandler(View v) {
    ... do stuff here...
}
Run Code Online (Sandbox Code Playgroud)

按钮XML:

        <Button 
            android:id="@+id/myButton"
            android:layout_width="44dp"
            android:layout_height="44dp"
            android:background="@drawable/eye_icon"
            android:onClick="myClickHandler"
            />
Run Code Online (Sandbox Code Playgroud)

异常中的一个有趣的注释是该应用程序试图在android.app.Application中找到该方法, 而不是在我的自定义Activity中.

有什么建议?

小智 3

重要的是MyActivitygetContext()ofCustomAdapter必须是同一个实例。比较你的和我的。

\n\n

我的代码:

\n\n

我的活动.java

\n\n
public class MyActivity extends Activity {\n    public static final String TAG = "MyActivity";\n    private ListView mListView;\n    private CustomAdapter mAdapter;\n    private ArrayList<String> mData;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_my);\n\n        mListView = (ListView) findViewById(R.id.listView);\n\n        mData = new ArrayList<String>();\n        mData.add("111");\n        mData.add("222");\n        mData.add("333");\n        mData.add("444");\n        mData.add("555");\n\n        mAdapter = new CustomAdapter(this, R.layout.list_item_view, mData);\n        mListView.setAdapter(mAdapter);\n    }\n\n    public void onClickHandler(View view) {\n        Log.i(TAG, "onClickHandler()");\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

自定义适配器.java

\n\n
public class CustomAdapter extends ArrayAdapter<String> {\n\n    public CustomAdapter(Context context, int resource, ArrayList<String> objects) {\n        super(context, resource, objects);\n    }\n\n    @Override\n    public View getView(int position, View convertView, ViewGroup parent) {\n        if (convertView == null) {\n            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);\n            convertView = inflater.inflate(R.layout.list_item_view, null);\n        }\n\n        return convertView;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

活动_my.xml

\n\n
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:layout_width="match_parent"\n    android:layout_height="match_parent"\n    android:paddingLeft="@dimen/activity_horizontal_margin"\n    android:paddingRight="@dimen/activity_horizontal_margin"\n    android:paddingTop="@dimen/activity_vertical_margin"\n    android:paddingBottom="@dimen/activity_vertical_margin"\n    tools:context=".MyActivity">\n\n    <ListView\n        android:id="@+id/listView"\n        android:layout_width="fill_parent"\n        android:layout_height="fill_parent" />\n\n</RelativeLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n

列表项视图.xml

\n\n
<?xml version="1.0" encoding="utf-8"?>\n\n<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\n              android:orientation="vertical"\n              android:layout_width="match_parent"\n              android:layout_height="match_parent">\n    <Button\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:text="Button"\n        android:id="@+id/button"\n        android:onClick="onClickHandler"/>\n</LinearLayout>\n
Run Code Online (Sandbox Code Playgroud)\n