отправить намерение с экстрастрокой из активности во фрагмент вкладки - PullRequest
0 голосов
/ 17 июня 2020

Иерархия активности моего приложения следующая: MainActivity> FragActivity> FragmentExp (включает фрагмент с 3 вкладками (Tab1 Tab2 Tab3))

У меня есть представление ресайклера в MainActivity и при нажатии другой список Я хочу от go до Tabs с экстрастроками (я имею в виду какое-то строковое сообщение). И покажите тост на этих вкладках.

Я пробовал: я установил намерение с помощью extrastring от моего MainActivity до FragActivity вот так.

 if (position==1){
            Intent i = new Intent(MainActivity.this, FragActivity.class);
            i.putExtra(MainActivity.ENGLISHPDF, "0");
            startActivity(i);
        }

и получил те строки прямо в Tab1 и Tab2 вот так:
In Tab1

code = getActivity().getIntent().getStringExtra(MainActivity.ENGLISHPDF);
        if (this.code.equals("0")) {
            Toast.makeText(getContext(), "hey its 1", Toast.LENGTH_SHORT).show();
        }

In Tab2

code = getActivity().getIntent().getStringExtra(MainActivity.ENGLISHPDF);
        if (this.code.equals("0")) {
            Toast.makeText(getContext(), "hey its 2", Toast.LENGTH_SHORT).show();
        }

Это мои коды:

MainActivity :

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, DataAdapter.OnNoteListener{
    public static final String ENGLISHPDF = "english";
    RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        (...)

        recyclerView = findViewById(R.id.add_header);
        (...)

        ArrayList<ListItem> items =  new ArrayList<>();
        items.add(new Item(R.drawable.green, "English", "1"));
        DataAdapter adapter = new DataAdapter(items, this);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void onNoteClick(int position) {

        if (position==0){
            Intent i = new Intent(MainActivity.this, FragActivity.class);
            i.putExtra(MainActivity.ENGLISHPDF, "0");
            startActivity(i);
        }
       }
    }

FragActivity :

public class FragActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frag);


        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,
                new FragmentExplorem(), COLLAPSING_TOOLBAR_FRAGMENT_TAG).commit();


    }

И наконец, в FragExp я установил tablayout и включил в него фрагмент с 3 вкладками. Это FragExp:

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab_layout, container, false);

        AppBarLayout appBarLayout = view.findViewById(R.id.tab_appbar_layout);
        ((CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams()).setBehavior(new AppBarLayoutBehavior());

        tabLayout = view.findViewById(R.id.tabs);
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);

        viewPager = view.findViewById(R.id.viewpager);
        viewPager.setOffscreenPageLimit(tab_count);

        toolbar = view.findViewById(R.id.toolbar);
        setupToolbar();

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewPager);
                viewPager.setCurrentItem(0);
            }
        });
        return view;
    }

    public class MyAdapter extends FragmentPagerAdapter {
        private MyAdapter(FragmentManager fm) {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        }
        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0: return new Tab1();
                case 1: return new Tab2();
                case 2: return new Tab3();
            }
            return null;
        }

        @Override
        public int getCount() {
            return tab_count;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                 case 0 : {
                    return "First";

                }
                case 1 : {
                    return "Second";

                }
                case 2 : {
                    return "Third";
                }

            return null;
        }
    }

1 Ответ

1 голос
/ 17 июня 2020

Получить экземпляр фрагмента, как в следующей функции. Этот способ получения экземпляра гарантирует, что все клиенты, которым нужен экземпляр, будут иметь одинаковый процесс создания фрагмента.

public class Tab1 extends Fragment {

    private static final String KEY_CODE = "key_code";

    public static Fragment newInstance(@Nullable String code) {
        Bundle args = new Bundle(1);
        if (code!= null)
            args.putString(KEY_CODE, code);

        Tab1 fragment = new Tab1();
        fragment.setArguments(args);
        return fragment;
    }
}

когда вам нужен экземпляр Tab1, вы должны одновременно передать параметр или null.

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0: return Tab1.newInstance(code);
        case 1: return Tab2.newInstance(code);
        case 2: return Tab3.newInstance(code);
    }
    return null;
}

Затем вы можете использовать код, вызвав Fragment.getArguments ().

// In Tab1
private String mCode;

private String DEFAULT_CODE = "0";

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mCode = getArguments().getString(KEY_CODE , DEFAULT_CODE);
    // Now you can use the mCode in any place in Tab1 you want, but make sure you do Null check before using it
}

Кстати, если «код» - это динамический c, тогда он будет совершенно другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...