将数据从活动发送到片段以更新列表

时间:2015-11-09 01:56:14

标签: android android-fragments

就是这种情况。我有一个活动有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没有捕捉到点击项目菜单的事件,我没有足够的时间来尝试解决它(在这里阅读了很多问题),所以我尝试了这种新方法。

提前致谢。

2 个答案:

答案 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);