这是我RecyclerView
的适配器。它旨在将数据从RecyclerView
传递到我的Fragment
,但我无法通过onClick()
方法执行此操作。
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString("name",name.getText().toString() );
OneFragment myFrag = new OneFragment();
myFrag.setArguments(bundle);
}
我的片段
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
txt_name=(TextView) txt_name.findViewById(R.id.name_emp);
String name = getArguments().getString("name");
txt_name.setText(name);
}
答案 0 :(得分:0)
我不确定你打算做什么。但是在将一个包设置为一个片段之后,你必须使用像这样的事务来启动片段
getSupportFragmentManager().beginTransaction().add(<id of the container>, myFrag).commit();
上的文档
答案 1 :(得分:0)
喜欢下面的代码为你的Activity创建一个方法,你有片段:
Recyclerview适配器代码:
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity)context).sendData(name.getText().toString());
}
在MainActivity中获取字符串并从Activity调用Fragment:
MainActivity Code:
String name;
public void sendData(String nameAdapter)
{
name = nameAdapter;
if(name!=null){
MedicineFragment med_frag = MedicineFragment.newInstance(name);
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, med_frag)
.commit();
}
}
在您的片段中获取Name的名称,如下所示:
片段代码:
String name;
public static MedicineFragment newInstance(String nameValue) {
Bundle args = new Bundle();
MedicineFragment fragment = new MedicineFragment();
name = nameValue;
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
在main_activity.xml中你必须采用FrameLayout,只有这个布局你的片段会改变一个。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/search_layout"
android:background="@color/blue_veryLight"
android:id="@+id/content_frame">
</FrameLayout>
答案 2 :(得分:0)
我知道我迟到了。不过,我会在这里发布一个答案。
在适配器类中进行这些更改。
public class FooAdapter extends extends RecyclerView.Adapter<FooAdapter.FooHolder> {
private RvClickListener mClickListener;
......
// rest of the code here
......
public FooAdapter(<other parameters>, RvClickListener clickListener) {
.....
// other variables initializations here
.....
mClickListener = clickListener;
}
......
// rest of the code here
......
@Override
public void onBindViewHolder(FooHolder holder, int position) {
// rest of the code
holder.itemView.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mClickListener != null) {
mClickListener.onClick(name.getText().toString());
}
}
});
}
// other codes here
public interface RvClickListener {
void onClick(String name);
}
}
现在是我们Fragment类中适配器的时间了。您需要更改以下代码。
public class FooFragment extends Fragment {
// other codes here
// before setting adapter to RecyclerView make these changes.
FooAdapter adapter = new FooAdapter(
<other parameters>,
new RvClickListener() {
@Override
public void onClick(String name) {
// do whatever you want
}
});
}