загрузить разные данные на основе argsBundle на одном фрагменте - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь использовать один и тот же фрагмент с одним и тем же макетом для нескольких имен ключей [Заголовки в коде]. Таким образом, будет несколько вкладок, каждая для каждого key_name [заголовка, позже разделенного как blog_name для фрагмента]. Основываясь на key_name, я пытаюсь изменить данные. создание фрагментов, как показано ниже.

private void setupViewPager(ViewPager viewPager) {

        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if(bundle != null) {
            Headers = bundle.getStringArrayList("Headers");
        }

        Bundle argsBundle=new Bundle();

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        for (String header: Headers) {
            argsBundle.putString("blog_name", header);
            adapter.addFragment(new Blog(), header, argsBundle);
        }

        adapter.addFragment(new Blog(), "aaaa", argsBundle);
        viewPager.setAdapter(adapter);

   }

Этот код создает 3 вкладки (одного и того же фрагмента).

Я бы использовал одну и ту же компоновку на этих 3 вкладках.

Это мой фрагмент


public class Blog extends Fragment {

    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    private String mParam1;
    private String mParam2;
    private String blog_name;

    public static Blog newInstance(String param1, String param2) {
        Blog fragment = new Blog();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public Blog() {
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle args = getArguments();
        if (args != null){
            this.blog_name = args.getString("blog_name");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (getArguments() != null) {
            Bundle argsBundle = new Bundle();
            blog_name = getArguments().getString("blog_name");
            Toast.makeText(this.getContext(), "wow" + blog_name, Toast.LENGTH_SHORT).show();
        }

        return inflater.inflate(R.layout.fragment_blog, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ((TextView)view.findViewById(R.id.test)).setText(blog_name.toString());
    }
}

Итак, на 3 мероприятиях я вижу один и тот же тост. «wow» + последний элемент из заголовков (TextView) test.setText также будет иметь ту же строку (последний элемент из заголовков)

Примечание. Заголовки находятся в setupViewPager, просто массив строк.

...