Android在点击时调用片段上的方法时出现错误。
Android在点击时调用片段上的方法时出现错误。
我正在从`BaseAdapter`中将一组`custom_rows`填充到我的`ListView`中。并且我在我的Fragment中设置了这个ListView。
我正在尝试给我`custom_row.xml`中的按钮设置`android:onClick="openComment"`,但是我得到了以下错误:
`java.lang.IllegalStateException: Could not find method openComment(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'open'`
在我的Fragment中,我有一个名为`openComment`的方法。如何在按钮点击时调用这个方法呢?
这是我的Fragment中调用这个方法的代码:
public class Home extends android.support.v4.app.Fragment implements View.OnClickListener { .... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myview = inflater.inflate(R.layout.home, container,false); listView = (ListView) myview.findViewById(R.id.activity_main); return myview; } .... .... public void openComment(View v) { //获取点击行的位置 final int position = listView.getPositionForView((View) v.getParent()); System.out,print("button clicked"); }
我的`custom_row.xml`如下所示,它包含一个TextView和一个Button:
以下是我的ListView的`activity_main.xml`:
Android call a method on fragment with onClick error是一个关于在Android中通过onClick调用fragment上的方法出错的问题。这篇文章将介绍问题的原因以及解决方法。
在这篇文章中,作者首先提到了之前的解答,并分享了自己的观点。作者认为,在活动中编写包含在片段中的按钮的逻辑,而不是在片段本身中编写,不是最佳实践。这违反了单一职责原则,并且遗憾的是,谷歌设计的Android阻止开发人员使用最佳实践。
接下来,作者提到了一种解决方法,即使用JakeWharton的ButterKnife库。使用这个库,可以轻松地绑定视图。在活动的onCreate方法中,可以使用ButterKnife.bind(this)绑定视图。在片段的onCreateView方法中,也可以使用ButterKnife.bind(this, view)绑定视图。
还有可以在ButterKnife的文档中找到代码,用于简化BaseAdapter的实现,以正确连接openComment到OnClick,而不是在XML中定义。
总结起来,Android call a method on fragment with onClick error问题的原因是将按钮的逻辑写在活动中而不是片段本身,解决方法是使用ButterKnife库来绑定视图,并根据ButterKnife的文档进行相关操作。