ListFragment onListItem在首次单击从后退单击返回时未触发

时间:2014-04-21 19:47:10

标签: android

使用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>

1 个答案:

答案 0 :(得分:0)

毕竟

onListItemClick正在解雇。问题是列表视图仍然可见。我可以通过onListItemClick()中的以下内容将其消失:

l.setVisibility(android.view.View.GONE);

但是,我不知道如何让它重新出现在onViewStateRestored()中。现在,我将为片段设置一个坚实的背景。但理想情况下,我想切换ListView上的可见性,以便继承View背景。