当前位置: 首页 > 知识库问答 >
问题:

无法从另一个片段打开一个片段

燕烨
2023-03-14

在我的Main2Activity中有5个片段(home、settings、newPost、notifications和profile)。

HomeFragment中,我有一个RecycerView,其中包含许多post视图,每个post都包含一个“open”按钮,该按钮应该打开一个PostFragment。问题是,我只能在RecyclerViewAdapter类和populateItemRows()方法中使用SetonClickListener,所以当我不能使用GetActivity()...

public class HomeFragment extends Fragment{

    private RecyclerView recyclerView;
    private RecyclerViewAdapter recyclerViewAdapter;
    private boolean isLoading = false;
    private ArrayList<String> rowsArrayList = new ArrayList<>();

    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_home, container, false);

        recyclerView = root.findViewById(R.id.recyclerView);
        initAdapter();
        initScrollListener();

        return root;
    }

    private void initAdapter() {
        recyclerViewAdapter = new RecyclerViewAdapter(getActivity(),2);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(recyclerViewAdapter);
    }

    private void initScrollListener() {
       ...
    }

    private void loadMore() {
        ...
    }
}

RecycerViewAdapter:


public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private final int VIEW_TYPE_ITEM = 0;
    private final int VIEW_TYPE_LOADING = 1;
    private ArrayList<Post> list = new ArrayList();
    private static final String TAG = RecyclerViewAdapter.class.getSimpleName();
    private String userId = FirebaseAuth.getInstance().getCurrentUser() != null ? FirebaseAuth.getInstance().getCurrentUser().getUid() : null;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private Context context;
    private User currentUser;
    private int type;

    public RecyclerViewAdapter(Context context, int type) {
        this.context = context;
        this.type = type;
        if (type == 0) {
            myPostsRetriever(context);
        } else if (type == 1) {
            appliedToPostsRetriever(context);
        } else if (type == 2) {
            homePostsRetriever(context);
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ...
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
        if (viewHolder instanceof ItemViewHolder) {
            populateItemRows((ItemViewHolder) viewHolder, position);
        } else if (viewHolder instanceof LoadingViewHolder) {
            showLoadingView((LoadingViewHolder) viewHolder, position);
        }
    }

    private void populateItemRows(ItemViewHolder viewHolder, int position) {
...

        viewHolder.itemView.findViewById(R.id.seePostButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

        Fragment newFragment = new PostFragment();
        FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.mobile_navigation, newFragment);
        transaction.addToBackStack(null);
        transaction.commit();
            }
        });
    }

共有1个答案

公西宏毅
2023-03-14

您需要来自构造的上下文对象。

FragmentTransaction fm = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mobile_navigation, newFragment);
transaction.addToBackStack(null);
transaction.commit();
 类似资料:
  • 问题内容: 我是Android的新手,这是我的第二个应用程序。我正在创建一个选项卡式活动,其中第一个片段具有创建新任务的形式,第二个片段具有所有已保存任务的列表,第三个片段从第二个列表中选择时将显示任务注释分段。第三个片段也应该像一个聊天活动,当您键入评论并点击发送按钮时,它会发布评论。当我从另一个地方(在下面的链接的GitHub分支中)实施此聊天活动时,该应用程序将完全按预期运行。但是,当我尝试

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 先生/女士,我想使用android JAVA将一个片段回调到另一个片段。我试图找到问题,但没有找到解决方案。若我使用接口,它会向活动发送回调响应,这是我不想要的。非常感谢。

  • 我需要一些暑期项目的帮助 这是我的事件片段 这是我的MyList片段 我正在使用RecyclerViewCardView显示事件。其想法是,用户可以单击每张卡片右侧的大加号,卡片将显示在MyList片段中。我想问一下,是否可以将一张卡直接从一个片段转移到另一个片段?而且,这两个片段都包含在同一个活动中,这使得它有点棘手(我还没有找到任何可用的解决方案)。 如果不可能,另一种方法是将CardView

  • 我试着从一个片段到主要片段。编译器不喜欢我的代码,但我不确定是什么问题。转换片段的最佳实践是什么? //这是我要导航到的主片段的xml 2019-07-12 17:49:45.091 959 4-9594/com.example.cribb E/AndroidRuntime:致命异常:主进程:com.example.cribb,PID:9594 Android.content.res.resour

  • 问题内容: 我已经尝试了一段时间(同样,在这里搜索),当在其他片段中按下按钮时,它可以帮助我刷新MainFragment中的listView。Sommeone可以解释一下如何使其工作吗? 这是带有函数的MainFragment(我不包括其他函数,因为我看不到它们如何起作用): } 这是另一个片段: } 问题答案: 这段代码最适合我。似乎很容易