我在MainActivity中有两个名为homeFragment和TopBlankFragment的片段。 我想将数据从mainActivity传递到homefragment。我使用bundle和replce home片段成功传递了数据。但问题是在替换homefragment后,TopBlankFragment显示为空白。
以下是我如何将数据从主要活动传递到homefragment的代码: -
if (newText.length() > 0) {
FragmentManager fragmentManager =getSupportFragmentManager();
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();
HomeFragment homeFragment = new HomeFragment();
Bundle bundle = new Bundle();
bundle.putString("searchKey", newText);
fragmentTransaction.replace(R.id.viewPager, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
以下是我在homeFragment中接受数据的代码: -
Bundle bundle = getArguments();
if (bundle != null) {
String searchKey = bundle.getString("searchKey");
Toast.makeText(getActivity(), "Searchkey " + searchKey, Toast.LENGTH_SHORT).show();
textView.setText(searchKey);
}
但主要问题是topBlankFragment显示为空白。 这是我的viewpagerAdapter: -
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> fragments = new ArrayList<>();
ArrayList<String> tabTitles = new ArrayList<>();
public void addFragments(Fragment fragment,String titles)
{
this.fragments.add(fragment);
this.tabTitles.add(titles);
}
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles.get(position);
}
public void replaceFragment(Fragment fragment) {
fragments.remove(0);
fragments.add(0, fragment);
tabTitles.remove(0);
tabTitles.add(0,"Home Fragment");
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
这是我的Mainactivity.xml: -
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="tanvir.testmaterialtablayout.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">
<include
android:id="@+id/tolbarlayoutinmainactivity"
layout="@layout/toolbar_layout"
app:layout_collapseMode="parallax" />
<com.miguelcatalan.materialsearchview.MaterialSearchView
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="0dp"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
app:tabIndicatorHeight="4dp"
app:tabMode="fixed"
app:tabSelectedTextColor="@android:color/white"
app:tabTextColor="@android:color/black" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
我正在寻找这整天的解决方案。但是没有找到合适的解决方案。
答案 0 :(得分:0)
也许这个问题与viewpager .. Viewpager有一些选项来creare片段。因此,如果您将view pager设置为offscreenpagelimit 1,那么它将始终创建新的片段。因此,从活动中获取的数据可能会在第二次丢失时显示空白片段。
我建议你也把活动类的代码放进去。
答案 1 :(得分:0)
首先,你在MainActivity中没有homeFragment和TopBlankFragment,你的MainActivity中有tablayout和Viewpager,viewpager有片段homeFragment和TopBlankFragment。现在确保你没有在homeFragment布局中使用相同的资源ID作为TopBlankFragment布局,因为它会导致问题
答案 2 :(得分:0)
我认为问题出在这里,
fragmentTransaction.replace(R.id.viewPager,homeFragment);
您正在使用homeFragment替换viewPager本身。
您应该更新使用片段(包括homeFragment)
来扩展viewpager的适配器因此,只需用新的homeFragment替换适配器中的homeFragment即可。
答案 3 :(得分:0)
ViewPager的适配器工作正常。也许问题出在其他地方。使用以下技术在片段中传递数据
发送数据
public static HomeFragment newInstance(String arg1) {
HomeFragment fragment = new HomeFragment();
Bundle args = new Bundle();
args.putLong(KEY_OF_DATA_ARG, arg1);
fragment.setArguments(args);
return fragment;
}
接收数据
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String argData = getArguments().getLong(KEY_OF_DATA_ARG);
}