我有一个使用片段和 viewpager 的 tablayout。现在在我的第二个选项卡中,我有这个布局。
在左侧,我加载了一个片段 ListPlacesFragment。右边是一个不同的 Fragment,DetailsPlacesFrament。当我单击列表视图上的一个项目时,我想将它显示在正确的片段上。我已经使用了活动意图,但我不知道如何将列表的索引传递给右侧的片段以显示适当的详细信息。请帮忙谢谢!
我有一个使用片段和 viewpager 的 tablayout。现在在我的第二个选项卡中,我有这个布局。
在左侧,我加载了一个片段 ListPlacesFragment。右边是一个不同的 Fragment,DetailsPlacesFrament。当我单击列表视图上的一个项目时,我想将它显示在正确的片段上。我已经使用了活动意图,但我不知道如何将列表的索引传递给右侧的片段以显示适当的详细信息。请帮忙谢谢!
假设这是你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);
}
}
您应该使用 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);
然后,您可以在使用索引将详细信息发送到的正确片段中创建一个公共方法。