在选项卡布局的片段内访问自动完成
Posted
技术标签:
【中文标题】在选项卡布局的片段内访问自动完成【英文标题】:Access AutoComplete inside Fragment of Tab Layout 【发布时间】:2020-04-30 13:15:29 【问题描述】:以下是我的 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_
android:layout_
android:inputType="textCapCharacters"
android:imeOptions="flagNoExtractUi|actionSearch"/>
但是,我无法从 TabLayoutActivity 访问此元素。片段视图膨胀后访问它的最佳方法是什么? 请注意,所有三个选项卡布局中都有类似的项目。 是否需要一个单独的适配器来保存所有三个片段布局并访问它们?如果是这样,我可以从哪个生命周期元素访问它们? P.S.:如果可能的话,我正在寻找对片段的非适配器访问(可能通过“布局 id”)?
【问题讨论】:
【参考方案1】:这样的事情会将视图暴露给外界:
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);
那么就可以从fragment中获取了:
textView = ((Tab1Fragment)fragment).getTextView()
但从软件设计的角度来看,您可能不应该这样做,而是考虑完全在 Fragment 中管理此视图,并且只公开收集的数据。
【讨论】:
在这种情况下,您认为正确的做法是从 onActivityCreated() 访问 Fragment 内的元素并将数据返回到 onStop() 处的活动吗?这两个函数都将驻留在 Tab1Fragments 类中? 是的,有点。将 setData(MyData data) 和 getData() 方法添加到 Tab1Fragment 类将允许您将数据加载到片段中并从片段中检索修改后的数据。这些方法会负责将数据加载到 UI 元素(如文本字段)中,并从中检索数据。然后,在您的活动中,您需要在片段呈现时(setData)和删除之前(getData)在片段上使用这些方法。 谢谢。你能不能提供一点帮助。我应该将 setdata 和 getdata 放在 Activity 类的什么位置?似乎可以访问 Fragment 对象的唯一位置是在 Activity 类的 SectionsPagerAdapter 内。我正在做的是将它们定义为活动类中的公共变量。我可以直接从那里设置和获取数据吗?即使布局不是布局不膨胀,如何设置数据? 活动的 onAttachFragment() 方法是一种选择。 Fragment 的 UI 在调用时并未创建,因此 setData() 方法只会将给定的数据存储在 Fragment 中,但是您可以使用 Fragment 的 onCreateView() 方法中的数据将数据加载到用户界面。 非常感谢。我会检查详细信息,然后再回来以上是关于在选项卡布局的片段内访问自动完成的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在android中使用firebase Realtime数据库动态设置选项卡布局的选项卡标题?