如何在一个Android片段中使用数据来填充同一个Activity中的另一个片段?

时间:2016-02-03 17:10:50

标签: android listview android-fragments android-intent

我有一个包含7个片段的单个活动的应用。在其中一个片段中,我有一个ListView,它使用适配器从数据库中获取人员列表。我希望能够触及其中一个人的片段A"并让应用切换到"片段B",并在片段B中填写有关该人员的信息。

我已经完成了大部分工作。 My Fragment A读取数据库并获取人员列表。如果我在片段B中对名称进行硬编码,它将成功读取数据库并填充有关该人的信息。

我无法搞清楚的是,(1)如何隔离片段A中的单个行以便在其上放置onclicklistener,以及(2)如何从片段A发送该名称以便被拾取片段B。

在Fragment A中我有:

public class PeopleList extends Fragment {
    private View rootView;
    private DatabaseHelper myDatabaseHelper;
    private SimpleCursorAdapter = mySimpleCursorAdapter;
    private Cursor personCursor;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        rootView = inflater.inflate(R.layout.peoplelayout, container, false);
        myDBHelper = new DatabaseHelper(getActivity());
        personCursor = myDBHelper.getPeopleCursor();
        String[] fromColumns = {"_id", "firstname", "lastname"};
        int toViews = {R.id.person_id, R.id.person_firstname, R.id.person_lastname};
        mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.people_layout, personCursor, fromColumns, toViews, 0);
        ListView myListView = (ListView) rootView.findViewById(R.id.people_row);
        myListView.setAdapter(mySimpleCursorAdapter);
        myDBHelper.close();
        return rootView;
    }
}

片段B类似于片段A,除了我[想要]传递人员ID

demographicDataCursor = myDBHelper.getDemographicDataCursor(person_id);

但是,目前,person_id是我想要查看的每个人的硬编码。

就像我说的那样,我不确定如何隔离片段A的ListView中的每个人以便将onclicklistener附加到它,以及如何将person_id发送到片段B.我知道意图,但是我读了几页,说在同一活动中从一个片段到另一个片段进行通信时不使用意图。

1 个答案:

答案 0 :(得分:1)

OnItemClickListener上的人员列表集ListView中,点击项目,将值放到Bundle,然后将Bundle添加到Fragment并完成片段的事务。

myListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
        // TODO Auto-generated method stub
        Cursor cursor = (Cursor) mySimpleCursorAdapter.getItem(position);
        String name = cursor.getString(cursor
                    .getColumnIndex("firstname"));
        FragmentB frag = new FragmentB();
        Bundle b = new Bundle();
        b.putString("name",name);
        frag.setArguments(b);
        getFragmentManager().beginTransaction().add(R.id.yourContainer, frag)
                        .commit();
     }
});

现在FragmentB收到来自Bundle的值,如下所示

public class FragmentB extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View v = inflater.inflate(R.layout.fragment_b, container, false);
        String name = getArguments().getString("name", "");
        if(!name.equals("")){
            Log.e("Name", name);
        }
        return v;
    }
}