0

我会尽量保持简短和重点。

观察下面的截图: 在此处输入图像描述

如何实现一种方法,当我在此 ListView 上按下一个项目时,该片段被替换为具有相应播放器数据的新片段?我应该替换 FrameLayout tabcontent 的内容吗?如果是这样,我如何确保 ViewPager 仍然有效?

“基本活动”的 XML:

<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TabWidget
        android:id="@android:id/tabs"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"/>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="0"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>
</TabHost>

这是 onActivityCreated :

@Override
    public void onActivityCreated(Bundle savedInstance)
    {
        super.onActivityCreated(savedInstance);
        setHasOptionsMenu(true);


        listView = (ListView)getActivity().findViewById(R.id.lv_federations);
        listView.setVisibility(View.GONE);
        if (savedInstance == null)
        {
            new PullFederationDataTask().execute();

        }       

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) 
            {
                // Replace Fragment
            }
        });
    }

我该怎么办?

4

1 回答 1

0

我不确定onItemClickListener在您的代码中替换 Fragment ,因为我正在努力解决同样的问题并且还没有找到合适的解决方案。

如果你通过扩展 a 来实现你的玩家列表ListFragment,你可以用一个新的片段替换当前片段,该片段使用片段事务显示玩家的详细信息(或者你可以开始一个新的活动,但我将在这个答案中讨论片段事务) .

要替换片段,您可以在onListItemClick将单击列表项的 ID 作为片段构造函数的参数的方法中创建一个新片段:

@Override
public void onListItemClick (ListView l, View v, int position, long id) {

    // Here I assume that the fragment containing the player details
    // is called PlayerDetailFragment.
    // The id of the item that was clicked is passed to the fragment's constructor.
    Fragment newFragment = new PlayerDetailFragment(id);
    FragmentTransaction ft = getFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack.
    // android.R.id.content refers to the id of the root ViewGroup.
    ft.replace(android.R.id.content, newFragment);
    ft.addToBackStack(null);

    // Commit the transaction
    ft.commit();    
}

您可以使用 ListAdapter 的getItemId()方法来引用播放器的 ID。使用ListView.setAdapter()方法来使用你自己ListAdapterListViewListAdapter负责维护支持此列表的数据并生成一个视图来表示该数据集中的项目。教程介绍了如何编写自己ArrayAdapterListView.

在您的ListAdapter中,您覆盖该getItemId()方法并返回玩家的 ID。然后PlayerDetailFragment可以使用 id 从数据库中检索数据。

我没有使用 ViewPagers 的经验,所以对此我无能为力。

于 2012-06-30T17:47:18.050 回答