我有一个使用片段和viewpager的tablayout。现在在我的第二个标签中,我有这个布局。
在左边,我加载了一个片段ListPlacesFragment。右边是一个不同的Fragment,DetailsPlacesFrament。当我单击列表视图上的项目时,我想在右侧片段上显示它。我在活动上使用了意图,但我不知道如何将列表的索引传递给右边的片段以显示相应的细节。请帮助谢谢!
答案 0 :(得分: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);
}
}
答案 1 :(得分: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);
然后,您可以在右侧片段中创建一个公共方法,使用索引将详细信息发送到。