Доступ к автозаполнению внутри фрагмента макета вкладки - PullRequest
0 голосов
/ 13 января 2020

Ниже приведен мой код onCreate:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.i(TAG, "Inside Base Drawer...");

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

        mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager){

            @Override
            public void onTabSelected(TabLayout.Tab tab){
                tabPosition = tab.getPosition();
            }
        });

    }

И ниже приведен мой FragmentPageAdapter для макетов скользящих вкладок

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                Tab1Fragment tab1 = new Tab1Fragment();
                return tab1;
            case 1:
                Tab1Fragment tab2 = new Tab2Fragment();
                return tab2;
            case 2:
                Tab1Fragment tab3 = new Tab3Fragment();
                return tab3;
            default:
                return null;
        }

    }

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

Ниже приведен код tabFragment:

public class Tab1Fragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState){
        return inflater.inflate(R.layout.tab_activity_sheet_details_tab1, viewGroup, false);
    }
}

У меня есть собственный autocompleteTextView внутри макета вкладки ( tab_activity_sheet_details_tab1 ) Ниже приведен код для того же самого:

<com.example.user.package.TabLayoutActivity.AutoCompleteAdapter.HistoryAutoCompleteTextView
            android:id="@+id/history_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textCapCharacters"
            android:imeOptions="flagNoExtractUi|actionSearch"/>

Однако я не могу получить доступ к этому элементу из TabLayoutActivity. Каков наилучший способ получить доступ к этому после раздувания представления фрагмента? И обратите внимание, что во всех трех макетах вкладок есть похожие элементы. Есть ли необходимость в отдельном адаптере, содержащем все три макета фрагментов и доступ к ним? Если да, из какого элемента жизненного цикла я могу получить к ним доступ? PS: я ищу неадаптерный доступ к фрагментам, если это возможно (возможно, с помощью "layout id")?

1 Ответ

0 голосов
/ 13 января 2020

Примерно так можно представить внешний мир:

public class Tab1Fragment extends Fragment {
    View mView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState){
        mView = inflater.inflate(R.layout.tab_activity_sheet_details_tab1, viewGroup, false);
        return mView;
    }

    public HistoryAutoCompleteTextView getTextView() {
      return (HistoryAutoCompleteTextView)mView.findViewById(R.id.history_text);
    }
}

Тогда вы можете получить его из фрагмента:

   textView = ((Tab1Fragment)fragment).getTextView()

Но с точки зрения разработки программного обеспечения Вы, вероятно, не должны этого делать и вместо этого рассмотреть возможность полностью управлять этим представлением во Фрагменте и предоставлять только собранные данные.

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