java - Android 在 fragment 之间传递字符串

标签 java android arrays string android-fragments

我在抽屉导航中有两个 fragment ListNav和SwipeNav。 ListNav 显示字符串数组中数据的 ListView 。 SwipeNav 将数据显示为字符串数组中相同数据的滑动 View 。

我正在使用单个 fragment 进行 viewpager 滑动 View 多个选项卡。

我的问题是:

When I click on B in List View, it shows A in SwipeNav,
When I click on C in List View, it shows A in SwipeNav,
When I click on D in List View, it shows A in SwipeNav,
When I click on E in List View, it shows A in SwipeNav,

我想得到结果:

If I click on B in List View, it will show B in SwipeNav,
If I click on C in List View, it will show C in SwipeNav,
If I click on D in List View, it will show D in SwipeNav

字符串数组:

<string-array name="tab_titles">
    <item>A</item>
    <item>B</item>
    <item>C</item>
    <item>D</item>
    <item>E</item>
    <item>F</item>
    <item>G</item>
    <item>H</item>
    <item>I</item>
    ........
</string-array>

我在下面使用 ListNav 将 SwipeNav 替换为 OnItemClickListener:

列表导航:

public class ListNav extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //returning our layout file 
        //change R.layout.yourlayoutfilename for each of your fragments
        return inflater.inflate(R.layout.nav_lis_layout, container, false);

    }

 @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        FragmentManager fm=getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.fragment12, new ListNavAdapter());
        ft.commit();

列表导航适配器:

public class ListNavAdapter extends ListFragment {

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.nav_list_layout, container, false);
    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),
            R.array.tab_titles, android.R.layout.simple_list_item_1);
    setListAdapter(adapter);
    getListView().setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String[] tabTitlesArray = getContext().getResources().getStringArray(R.array.tab_titles);
            Bundle bundle = new Bundle();
            bundle.putString("tab_titles", tabTitlesArray[i].toString());

            SwipeNav fragobj = new SwipeNav();
            fragobj.setArguments(bundle);

            FragmentManager fm=getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(((ViewGroup)(getView().getParent())).getId(), fragobj);
            ft.addToBackStack(null);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();
        }
    });
}

在滑动导航中:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    if (getArguments() != null && !getArguments().isEmpty()) {
        Bundle bundle = this.getArguments();
        String myInt = bundle.getString("tab_titles");
    }
        return inflater.inflate(R.layout.nav_swipe, container, false);

}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    myPagerAdapter = new MyPagerAdapter(getChildFragmentManager(),getContext());
    viewPager = (ViewPager) view.findViewById(R.id.pager);

    viewPager.setAdapter(myPagerAdapter);

}

这是 MyPagerAdapter:

public class MyPagerAdapter extends FragmentStatePagerAdapter {
private Context context;


private String[] tabTitlesArray = null;
public MyPagerAdapter(FragmentManager fm, Context context) {
    super(fm);

    tabTitlesArray = context.getResources().getStringArray(R.array.tab_titles);
    this.context= context;
}

@Override
public Fragment getItem(int i) {
    Fragment fragment = new AFragment();
    Bundle args = new Bundle();

    args.putString(AFragment.ARG_OBJECT, tabTitlesArray[i]);
    fragment.setArguments(args);
    return fragment;
}

@Override
public int getCount() {
    return tabTitlesArray.length;
}

@Override
public CharSequence getPageTitle(int position) {


    return "OBJECT " + (position + 1);
}
}

选项卡式 Activity AFragment 的单个 fragment :

public class AFragment extends Fragment {
public static final String ARG_OBJECT = "object";

public AFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // The last two arguments ensure LayoutParams are inflated
    // properly.


    View rootView = inflater.inflate(R.layout.fragment_a, container, false);
    Bundle args = getArguments();
    ((TextView) rootView.findViewById(R.id.text1)).setText(args.getString(ARG_OBJECT));
    return rootView;


}

nav_lis_layout:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment12"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

导航列表布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

我在 Stackoverflow 中搜索了所有答案。但未能解决我的问题,为什么特定项目单击不向下一个 fragment 显示相同的项目。 我需要你的帮助。

最佳答案

你不应该在字符串中放入逗号

 "tabTitlesArray[i]"

尝试使用

 ""+tabTitlesArray[i]

关于java - Android 在 fragment 之间传递字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373351/

相关文章:

java - Java 中是否可以在没有反射的情况下进行运行时编译的类实例化和使用?

javax.management.MalformedObjectException。属性值部分中的无效字符 ':'

PHP:如何在支持属性的情况下将数组转换为 XML(DOMi?)

android - 禁用的复选框颜色

android - 没有找到 native/UnsatisfiedLinkError 的实现让我抓狂

c - array undeclared , first used in the function error during dynamic memory allocation 数组未声明,首次用于动态内存分配期间的函数错误

c - 使用指针获取数组的长度

java - 仅将textfield的提示文字居中

java - 这个方法返回什么?

Android 显示来自 BroadcastReceiver 的通知