我有一个包含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.我知道意图,但是我读了几页,说在同一活动中从一个片段到另一个片段进行通信时不使用意图。
答案 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;
}
}