Android在点击时调用片段上的方法时出现错误。

11 浏览
0 Comments

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`:




0
0 Comments

问题的出现原因是在BaseAdapter中调用了Fragment的方法,但是出现了NullPointerException错误。出现这个错误的原因是在getView方法中绑定控件的操作不正确。解决方法是将要调用的方法写在Fragment中,并在BaseAdapter的getView方法中使用上述代码调用方法。如果仍然出现NullPointerException错误,可能是因为需要将要调用的方法设置为静态方法,这可能会引起其他问题。

0
0 Comments

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的文档进行相关操作。

0
0 Comments

问题的原因是在于将openComment(View v)方法声明在了fragment中,而应该将其声明在activity中。解决方法是将该方法声明在activity中,并在该方法中调用fragment中的openComment(View v)方法。代码如下:

public void openComment(View v){
    yourFragment.openComment(v);
}

然而,我认为这种解决方式并不是一个好的选择。更好的解决方法是在适配器或者fragment中实现onClickListener

0