Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-从活动单击句柄片段_Java_Android_Android Fragments - Fatal编程技术网

Java Android-从活动单击句柄片段

Java Android-从活动单击句柄片段,java,android,android-fragments,Java,Android,Android Fragments,我有一个片段类,它包含一些字段 public class ReviewFragment extends Fragment { //... private String paramText; public String getParamText() { return paramText; } //... } 从活动中,我添加了这个片段的几个实例,并设置了这个字段值。我还将每个实例放在列表中,并设置fragment tag=“fragment0”、“fragmen

我有一个片段类,它包含一些字段

public class ReviewFragment extends Fragment {

    //...
    private String paramText;
    public String getParamText() { return paramText; }
    //...
}
从活动中,我添加了这个片段的几个实例,并设置了这个字段值。我还将每个实例放在列表中,并设置fragment tag=“fragment0”、“fragment1”等

我正在尝试获取片段标记以在我的reviewFragments列表中查找片段。问题是view.getTag()返回null,而不是“reviewN”。我试图在ReviewFragment类中编写相同的方法,但Android Studio不允许我将其附加到onClick


所以问题是,在onClick句柄方法中,我需要同时获取活动和片段。我该怎么做呢?

以防你需要一堆
片段。在这种情况下,最好使用
ListView
(或任何其他类型的视图,例如
RecyclerView
)。您可以轻松地侦听单击事件,并根据列表项的数量执行任何操作

如果你真的需要使用片段。您可以采用不同的方法。
首先,在
reviewClick(视图视图)
中,您得到的不是片段标记,而是视图标记。为什么要将
视图
作为参数?
如果需要片段,您可以遵循最常用的方法在
活动中使用回调方法

这里的问题是,如果不使用覆盖布局,您的
Framgent
可能包含不同的视图,并且您无法直接在整个片段上获得onClick,但在这种情况下,您还必须处理layout onClick事件。
正如我已经提到的,可能的解决方案是使用回调方法

以下是实现此功能的几个步骤:

例如,在片段中创建内部接口

 public interface       OnReviewSelectedListener {
        public void onReviewSelected(int position);  }
您的activtiy现在必须实现此接口

public static class MainActivity extends Activity
        implements ReviewFragment.OnReviewSelectedListener
您可以在中确定framgent

 public void onReviewSelected(int position) {
          if(position==YOUR_TAG) {

          }
    }
ReviewFragment
中的
onAttach
方法中,您必须将活动投射到界面

   @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnReviewSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnReviewSelectedListener");
        }
    }
如果你真的想使用带有标签的片段,你可以在你的片段中执行以下操作

public void onCommentClick() {
      // do some stuff
     mCallback.onReviewSelected(getFramgentTag());
}

可以使用片段作为参数吗?不知道,我现在就试试。您能为第二个选项提供一个代码示例吗?如果您能提供您的活动和片段的完整代码就更好了。因为我可以询问您是否要实现注释/评论,并单击“使用此注释执行某些操作”?我无法将带有片段参数的方法附加到onClick,存在运行时异常。Android studio生成的代码与您提供的代码类似,是的,我认为这正是我需要的,我将尝试这种方式。这是一个非常糟糕的代码,我想当你看到它时,你会感到悲伤:(是的,我已经实现了简短的评论,我想在用户点击简短版本时显示另一个评论全文的活动。我已经编辑了我的帖子,请看一看。如果你有任何问题,请随时提问。
   @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnReviewSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnReviewSelectedListener");
        }
    }
public void onCommentClick() {
      // do some stuff
     mCallback.onReviewSelected(getFramgentTag());
}