就是这种情况。我有一个活动有5个标签(5个片段)。其中一个片段使用RecyclerView
来显示帖子列表(如论坛)。当用户点击项目菜单时,我需要实现发送新帖子并更新列表的可能性。我将新帖子发送到我的数据库并管理响应没有问题,但我不知道如何从活动中告诉片段告诉de adapter更新列表。我希望我能解释自己(英语不是我的第一语言)。
到目前为止,这是我的代码。
活动:
public class UsuarioActivity extends AppCompatActivity {
public ViewPager mPager;
public SlidingTabLayout mTabs;
...
protected void onCreate (Bundle savedInstanceState) {
mPager = (ViewPager) findViewById(R.id.pagerUsuario);
mTabs = (SlidingTabLayout) findViewById(R.id.tabsUsuario);
...
mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
mTabs.setCustomTabView(R.layout.custom_tab_view, R.id.tabText);
mTabs.setDistributeEvenly(true);
mTabs.setBackgroundColor(getResources().getColor(R.color.white));
mTabs.setViewPager(mPager);
}
class MyPagerAdapter extends FragmentStatePagerAdapter {
FragmentManager fragmentManager;
public MyPagerAdapter (FragmentManager fm) {
super(fm);
fragmentManager = fm;
}
@Override
public Fragment getItem (int position) {
Fragment fragment = null;
switch (position) {
case TAB_INFO:
fragment = FragmentUserInfo.getInstance(usuario);
break;
case TAB_COM:
fragment = FragmentUserComment.getInstance(usuario);
break;
case TAB_SEG:
fragment = FragmentUserSeg.getInstance(usuario);
break;
case TAB_IM:
fragment = FragmentUserImages.getInstance(usuario);
break;
case TAB_FILES:
fragment = FragmentUserFiles.getInstance(usuario);
break;
}
return fragment;
}
@Override
public CharSequence getPageTitle (int position) { ... }
@Override
public int getCount () { return TAB_COUNT; }
}
}
片段:
...
import android.support.v4.app.Fragment;
...
public class FragmentUserComment extends Fragment {
private RecyclerView recyclerView;
private RVIndexCommetAdapter indexCommetAdapter;
private static final String KEY_USUARIO = "KEY_USUARIO";
public static FragmentUserComment getInstance (Usuario usuario) {
FragmentUserComment fragmentUserComment = new FragmentUserComment();
Bundle args = new Bundle();
args.putLong(KEY_USUARIO, idusuario);
fragmentUserComment.setArguments(args);
return fragmentUserComment;
}
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
usuario = getArguments().getLong(KEY_USUARIO);
View layout = inflater.inflate(R.layout.fragment_user_comment, container, false);
recyclerView = (RecyclerView) layout.findViewById(R.id.recViewUsuariosComment);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
indexCommetAdapter = new RVIndexCommetAdapter(getContext());
indexCommetAdapter.setListaComentarios(usuario.list);
recyclerView.setAdapter(indexCommetAdapter);
}
我认为没有必要在这里复制适配器类,因为我的主要问题是如何将新的帖子数据从活动发送到片段。
PS:如果有人向我建议,我知道我可以将新帖子发送到我的数据库并直接在片段中管理响应,而不是在活动中。事实上,这是我的第一次尝试,但onOptionsItemSelected没有捕捉到点击项目菜单的事件,我没有足够的时间来尝试解决它(在这里阅读了很多问题),所以我尝试了这种新方法。提前致谢。
答案 0 :(得分:0)
要从Activity刷新列表,你应该使你的适配器静态并从你的Activity notifyDataSetChanged()调用,它可能看起来像这样
FragmentUserComment.mAdapter.notifyDataSetChanged();
要将数据从Activity发送到Fragment,您可以使用静态变量创建类,并在Activity中将它们写入并在Fragment中读取它们。它不是最专业的方法,但它可以工作,而且很容易实现。
答案 1 :(得分:0)
在FragmentUserComment中创建方法,如下所示:
public void updateList(datas){
mAdapter.setdatas(datas);
mAdapter.notifyDataSetChanged();
}
刷新列表时可以在活动中调用updateList()
((FragmentUserComment)fragment).updateList(datas);