Android 片段的内容被复制到另一个片段
我对RecyclerView和Fragment有问题。我有4个选项卡,每个选项卡包含一个RecyclerView。 我的问题是,我在不同的选项卡上看到相同的结果,看起来片段正在被复制 我的主要活动:Android 片段的内容被复制到另一个片段,android,android-recyclerview,Android,Android Recyclerview,我对RecyclerView和Fragment有问题。我有4个选项卡,每个选项卡包含一个RecyclerView。 我的问题是,我在不同的选项卡上看到相同的结果,看起来片段正在被复制 我的主要活动: Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolBar); final ViewPager viewPager = (ViewPager) findViewById(R.id.main_pager); TabLayout
Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolBar);
final ViewPager viewPager = (ViewPager) findViewById(R.id.main_pager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.main_tabLayout);
setSupportActionBar(toolbar);
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
fragmentInvite = new InviteFragment();
attendingFragment = new AttendingFragment();
notAttendingFragment = new NotAttendingFragment();
maybeFragment = new MaybeFragment();
adapter.addFragment(fragmentInvite, "first");
adapter.addFragment(attendingFragment, "second");
adapter.addFragment(notAttendingFragment, "third");
adapter.addFragment(maybeFragment, "fourth");
viewPager.setAdapter(adapter);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(viewPager);
我的片段适配器:
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments = new ArrayList<>();
private ArrayList<String> titles = new ArrayList<>();
public void addFragment(Fragment fragment, String title){
fragments.add(fragment);
titles.add(title);
}
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
第三段:
public class InviteFragment extends Fragment {
private RecyclerView rv_invite;
private Button btn_done;
private List<String> numbers;
private AlertDialog ratingDialog;
private String message;
public ArrayList<Contact> contacts;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_invite, container, false);
numbers = new ArrayList<>();
contacts = new ArrayList<>();
//find done button
btn_done = (Button) view.findViewById(R.id.btn_done);
//find listview
rv_invite = (RecyclerView) view.findViewById(R.id.rv_invite);
//get contacts list
setContacts(numbers);
//sorting the contact list
Collections.sort(contacts);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
//mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_invite.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(contacts);
rv_invite.setAdapter(mAdapter);
return view;
}
public class AttendingFragment extends Fragment {
private Button btn_resend;
private RecyclerView attending;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_attending, container, false);
attending = (RecyclerView) v.findViewById(R.id.attending_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
attending.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.attending);
attending.setAdapter(mAdapter);
return v;
}
public class NotAttendingFragment extends Fragment {
private RecyclerView rv_not_attending;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_not_attending, container, false);
rv_not_attending = (RecyclerView) v.findViewById(R.id.not_attending_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
rv_not_attending.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.not_attending);
rv_not_attending.setAdapter(mAdapter);
return v;
}
public class MaybeFragment extends Fragment {
private List<Boolean> status;
private RecyclerView rv_maybe;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_maybe, container, false);
rv_maybe = (RecyclerView) v.findViewById(R.id.maybe_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
rv_maybe.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.maybe);
rv_maybe.setAdapter(mAdapter);
return v;
}
第四段:
public class InviteFragment extends Fragment {
private RecyclerView rv_invite;
private Button btn_done;
private List<String> numbers;
private AlertDialog ratingDialog;
private String message;
public ArrayList<Contact> contacts;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_invite, container, false);
numbers = new ArrayList<>();
contacts = new ArrayList<>();
//find done button
btn_done = (Button) view.findViewById(R.id.btn_done);
//find listview
rv_invite = (RecyclerView) view.findViewById(R.id.rv_invite);
//get contacts list
setContacts(numbers);
//sorting the contact list
Collections.sort(contacts);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
//mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_invite.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(contacts);
rv_invite.setAdapter(mAdapter);
return view;
}
public class AttendingFragment extends Fragment {
private Button btn_resend;
private RecyclerView attending;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_attending, container, false);
attending = (RecyclerView) v.findViewById(R.id.attending_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
attending.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.attending);
attending.setAdapter(mAdapter);
return v;
}
public class NotAttendingFragment extends Fragment {
private RecyclerView rv_not_attending;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_not_attending, container, false);
rv_not_attending = (RecyclerView) v.findViewById(R.id.not_attending_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
rv_not_attending.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.not_attending);
rv_not_attending.setAdapter(mAdapter);
return v;
}
public class MaybeFragment extends Fragment {
private List<Boolean> status;
private RecyclerView rv_maybe;
private LinearLayoutManager mLayoutManager;
private rvAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment_maybe, container, false);
rv_maybe = (RecyclerView) v.findViewById(R.id.maybe_recycler_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity().getBaseContext());
rv_maybe.setLayoutManager(mLayoutManager);
// specify an adapter (see also next example)
mAdapter = new rvAdapter(MainActivity.maybe);
rv_maybe.setAdapter(mAdapter);
return v;
}
公共类maybeffragment扩展片段{
私人名单状态;
可能是私人回收站;
私人直线酒店经理;
私人住宅;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fragment_maybe,container,false);
rv_maybe=(RecyclerView)v.findviewbyd(R.id.maybe_recycler_视图);
//使用线性布局管理器
mLayoutManager=newlinearlayoutmanager(getActivity().getBaseContext());
rv_.setLayoutManager(mLayoutManager);
//指定适配器(另请参见下一个示例)
mAdapter=新的rvAdapter(MainActivity.maybe);
rv_.setAdapter(mAdapter);
返回v;
}
考虑到您在MainActivity中正确设置了数组,请尝试更改片段中获取这些值的部分
改变
mAdapter = new rvAdapter(MainActivity.maybe);
到
如果更改不起作用,请按照以下说明对结果进行注释。将适配器中的contacts
字段转换为public,并将这些行插入更改后的frag代码中进行测试。在注释中发布日志
Log.i( this.getClass().getSimpleName(), ">>> AdapterValue: " + mAdapter.contacts );
Log.i( "MainActivity", ">>> MainActvity value :" + ((MainActivity.class)getActivity()).maybe );
问题出在适配器上
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.contacts_list_item, parent, false);
// set the view's size, margins, paddings and layout parameters
CustomViewHolder vh = new CustomViewHolder(v);
return vh;
}
应该是:
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View v = LayoutInflater.from(ctx)
.inflate(R.layout.contacts_list_item, parent, false);
// set the view's size, margins, paddings and layout parameters
CustomViewHolder vh = new CustomViewHolder(v);
return vh;
}
从片段传递上下文解决了问题。
当我使用parent.getContext()时,我的详细信息被另一个片段覆盖。问题描述非常模糊。请尝试重新格式化它。另外,请提供有关recyclerview的代码。当前帖子中没有代码。请尝试明确您的问题是什么。我在不同选项卡上看到相同的片段。我已编辑了问题。谢谢您从您填充或加载反回收适配器的片段中包含反代码包括片段代码谢谢@TinMegali