使用ListFragment和OnListItemClick。对于带有寻呼机的选项卡,实现直接来自ADT模板。 ListView从默认适配器和默认的simple_list_item_1填充 - 所以没有按钮,复选框等来捕获点击事件。
从详细视图返回时,下一次单击listview项会导致项突出显示,但OnListenItemClick不会触发。第二次单击它会触发并进入细节。这次从详细信息视图返回时,它可以在第一次单击时工作。下次再拿两次。替代那种模式。
R.id.pager是默认布局中的MainActivity ViewPager。另外,我在onViewStateRestored()中弹出BackStack。我无法弄清楚为什么每隔一次需要2次点击。
这是代码。谢谢!
public class ContactListFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View contactsView = inflater.inflate(R.layout.fragment_contact_list, container, false);
String jsonData = Contact.readContactsFromAssets(getActivity());
ArrayList<Contact> contactList = Contact.makeContactList(jsonData);
ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(getActivity(), android.R.layout.simple_list_item_1,
contactList);
setListAdapter(adapter);
return contactsView;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Contact myContact = (Contact)l.getItemAtPosition(position);
ContactDetailFragment detailFragment = new ContactDetailFragment();
Bundle contactBundle = new Bundle();
contactBundle.putString("CELL_NUMBER", myContact.getCellNumber());
detailFragment.setArguments(contactBundle);
FragmentTransaction fragmentTransaction = getActivity().getFragmentManager().beginTransaction();
fragmentTransaction.addToBackStack("contact");
fragmentTransaction.replace(R.id.pager, detailFragment, "contact");
fragmentTransaction.commit();
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
FragmentManager fm = getActivity().getFragmentManager();
fm.popBackStack("contact", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
fragement_contact_list布局如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:id="@+id/contact_view" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
答案 0 :(得分:0)
onListItemClick正在解雇。问题是列表视图仍然可见。我可以通过onListItemClick()中的以下内容将其消失:
l.setVisibility(android.view.View.GONE);
但是,我不知道如何让它重新出现在onViewStateRestored()中。现在,我将为片段设置一个坚实的背景。但理想情况下,我想切换ListView上的可见性,以便继承View背景。