0

我有一个使用片段和 viewpager 的 tablayout。现在在我的第二个选项卡中,我有这个布局。 在此处输入图像描述

在左侧,我加载了一个片段 ListPlacesFragment。右边是一个不同的 Fragment,DetailsPlacesFrament。当我单击列表视图上的一个项目时,我想将它显示在正确的片段上。我已经使用了活动意图,但我不知道如何将列表的索引传递给右侧的片段以显示适当的详细信息。请帮忙谢谢!

4

2 回答 2

1

假设这是你Activity的包含DetailsPlacesFragment

================================================================
|                   |                                          |
|    ListView       |        FrameLayout                       |
|                   |                                          |
================================================================

在您的ListView中,将适配器设置为这样的

AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        displayDetailsPlacesFragment(position);
    }
}

对于你的可替换片段Activity

public void displayDetailsPlacesFragment(int position) {
    Fragment fragment = DetailsPlacesFragment.newInstance(position);
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.id.content_frame, fragment);  // FrameLayout id
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(null);
    ft.commit();
}

对于您的DetailsPlacesFragment,您通过传递position列表项的 来定义它

public class DetailsPlacesFragment extends Fragment {
    public static DetailsPlacesFragment newInstance(int position) {
        DetailsPlacesFragment fragment = new DetailsPlacesFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) {
        int position = getArguments().getInt("position");  // use this position for specific list item
        return super.onCreateView(inflater, container, icicle);
    }
}
于 2013-10-29T09:42:31.123 回答
0

您应该使用 Activity 作为两个片段之间的中介。我要做的是创建一个活动将实现的接口,如 PlaceClickListener:

public interface PlaceClickListener{
    public void onPlaceClicked(int index);
}

在您的活动中,您必须实施它:

class MainActivity implements PlaceClickListener {

    /* other code */

    public void onPlaceClicked(int index){
        /* call function for detail fragment here */
    }
}

然后在您的列表片段中,当您单击一个项目时执行以下操作:

((PlaceClickListener)getActivity()).onPlaceClicked(int index);

然后,您可以在使用索引将详细信息发送到的正确片段中创建一个公共方法。

于 2013-10-29T06:02:40.893 回答