在我的项目中,我正在使用带有可滑动的三个片段的动作栏(带有viewpager的标签),我正在尝试用第四个片段替换其中一个片段,但是我无法得到它..
**Below is my code**
public class GetRideFragment extends Fragment implements ICustomDateTimeListener, SelectedLocationListener{
public GetRideFragment() {
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_getride, container, false);
return rootView;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
fromac.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/* Intent newintent = new Intent(getActivity(), AutoSearchActivity.class);
startActivity(newintent);
getActivity().overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up );*/
PlaceSearchFragment fh = new PlaceSearchFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragcontainer, fh);
ft.addToBackStack("fh");
ft.commit();
}
});
以下是我的布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragcontainer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/fragcontainer"
>
<TextView
android:id="@+id/ridetitile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get a Ride"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:textColor="#33b5e5"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:background="@drawable/gray_btn_disabled_normal" >
...............
...........
我的adpater
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Top Rated fragment activity
return new GetRideFragment();
case 1:
// Games fragment activity
return new PostRideFragment();
case 2:
// Movies fragment activity
return new SearchRidesFragment();
}
return null;
}
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 3;
}
}
n不确定我哪里出错。感谢任何帮助。
答案 0 :(得分:0)
我遇到了同样的问题。经过大量搜索,我找到了解决方案。我会在你的代码中看到2个问题:(抱歉我的英文不好)
1)要更改给定位置的适配器(连接到viewpager)内的项目,您必须更改方法public Fragment getItem(int index)
返回的项目并调用方法notifyDataSetChanged()
以通知内容更改的适配器。
2)FragmentStatePagerAdapter
的实现包含基于位置的缓存,即使您调用notifyDataSetChanged()
并且返回PagerAdapter.POSITION_NONE
,它也不会更改(有一个此处报告的问题:https://code.google.com/p/android/issues/detail?id=37990)
我建议你:
使用FragmentPagerAdapter
,正确实施方法getItem(int index)
(在给定位置使用正确的项目),getItemPosition(Object object)
和getItemId(int position)
如果您想使用FragmentStatePagerAdapter
,请考虑上面我喜欢的问题(NewFragmentStatePagerAdapter)中建议的实施方案。
我希望它有所帮助!