如何从MainActivity获取对ListFragment适配器和底层数据的引用?

时间:2016-01-11 03:41:25

标签: java android

我有一个ListFragment,其中填充了数据:

String list1 = {...arbitrary data...};
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list1);

在我的MainActivity中,我有一个changeData(String data, int position)方法,它将更改ListFragment中某个位置的数据。我如何获得该列表? 我理解,首先我需要获得ListFragment的引用,如下所示:

MyListFragment myListFragment = (MyListFragment) getFragmentManager().findFragmentByTag("MyListFragment");

但下一步是什么?对不起,我是Android的初学者。

这是我的主要活动:

public class MainActivity extends AppCompatActivity implements MyListFragment.Communicator, EditFragment.EditCallback{

    FragmentManager fragmentManager;
    FragmentTransaction fragmentTransaction;
    FragmentTransaction fragmentTransaction2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyListFragment myListFragment = new MyListFragment();
        fragmentManager = getFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.fragContainer, myListFragment, "MyListFragment");
        fragmentTransaction.commit();
    }

    @Override
    public void onMyListItemClick(String name, int position) {
        EditFragment editFragment = new EditFragment();

        Bundle args = new Bundle();
        args.putString("name", name);
        args.putInt("position", position);
        editFragment.setArguments(args);

        fragmentTransaction2 = getFragmentManager().beginTransaction();
        fragmentTransaction2.replace(R.id.fragContainer, editFragment);
        fragmentTransaction2.addToBackStack(null);
        fragmentTransaction2.commit();
    }

    @Override
    public void updateItem(int position, String textUpdated) {
        //getting a reference to ListFragment:
        MyListFragment myListFragment = (MyListFragment) getFragmentManager().findFragmentByTag("MyListFragment");
        ArrayAdapter adapter = (ArrayAdapter) myListFragment.getListView().getAdapter();

    }
}

1 个答案:

答案 0 :(得分:0)

您可以在updateItem中更新后调用adapter.notifyDataSetChanged(),因为您已经获得了适配器。而无需创建任何新方法。以下是ArrayAdapter的链接以获取更多信息。

Array Adapter