在包含 RecycelerView 的活动中加载片段



我有一个只有RecycelerView的活动。我想在按下每一项RecycelerView时加载一个片段,一些数据应该发送到我的片段。在我的适配器中,我编写loadFragment函数并在onBindViewHolder函数中调用它。当我按下该项目时,显示片段,但我的RecycelrView仍然存在并显示出来。在MainActivityxml文件中,我放了一个 idflContentFrameLayout,其中包括一个RecycelerView.如何隐藏RecycelerView并将数据发送到我的片段? 这是MainActivityxml文件。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recPost"
android:layout_width="match_parent"
android:layout_height="match_parent" 
/>
</FrameLayout>

这是适配器的代码。

public class PostRecyclerAdapter extends RecyclerView.Adapter<PostRecyclerAdapter.PostViewHolder> {
private Context context;
private ArrayList<Post> values;
public PostRecyclerAdapter(Context context, ArrayList<Post> values) {
this.context = context;
this.values = values;
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recyceler_post_item, parent, false);
return new PostViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final PostViewHolder holder, int position) {
final Post post=values.get(position);
holder.txtCaption.setText(post.getCaption());
holder.txtPreview.setText(post.getPreview());
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadFragment(holder.layoutId,new InfoPostFragment());
}
});
}
private void loadFragment(int layoutId, Fragment fragment) {
FragmentManager manager =((FragmentActivity)context).getSupportFragmentManager();
manager.beginTransaction().replace(layoutId, fragment).commit();
}
public class PostViewHolder extends RecyclerView.ViewHolder{
private TextView txtCaption;
private TextView txtPreview;
private FrameLayout flContent;
private int layoutId;
private View root;
public PostViewHolder(View itemView) {
super(itemView);
root=itemView;
txtCaption=itemView.findViewById(R.id.txtCaption);
txtPreview=itemView.findViewById(R.id.txtPreview);
flContent=itemView.findViewById(R.id.flContent);
layoutId=R.id.flContent;
}
}
}

从 FrameLayout 中删除回收器视图

传递框架布局的引用,或者只使用 loadFragment 中的活动上下文来查找 frameLayout 和 frameLayout.removeAllViews((

或者只是找到ViewById(R.android.recPost(.setVisibility(View.GONE(

但是,我想指出一件事。管理片段生命周期应该是活动文件的一部分,加载片段代码不应位于适配器类中。您可能需要重新考虑此方法。为此实现一个回调接口。

最新更新