在我的应用程序中,我在ActionBar中添加了DropDown Spinner,现在无法辨认 - 如何更改所选下拉列表的底部。在我的activity_main.xml布局(Home)中,仅包含显示列表的片段。我正在寻找的是,创建其他UI屏幕也作为片段并在所选的每个dropDown上更改放置的片段。我的意思是主页有fragment_main.xml,选择dropDown设置然后显示setting_fragment.xml等等。我的主要是:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame" >
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
class="terryconsulting.servicestation.AppointListFragment"
android:id="@+id/main_fragment"
/>
</FrameLayout>
在MainActivity类中,我实现了ActionBar.OnNavigationListener
,它调用了之前在屏幕上显示Hello World文本的PlaceholderFragment。
@Override
public boolean onNavigationItemSelected(int position, long id) {
// When the given dropdown item is selected, show its contents in the
// container view.
//getFragmentManager().beginTransaction()
// .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
// .commit();
return true;
// http://www.vogella.com/tutorials/AndroidActionBar/article.html --- ACTIONBAR ACTION
}
// As AppointListFragment is added in this activity, so need to implement this listener here
@Override
public void onFragmentInteraction(Uri uri) {
System.out.println("Into onFragmentInteraction. URL - " + uri);
return;
}
我在哪里: - 从下拉菜单中选择设置时,我无法知道如何拨打/设置SettingFragment
。从设置何时按下Home
图标返回到主页AppointListFragment
就可以了?
我在想什么?问,是否可能&amp;实际的 ?我认为应该是这样,因为使用自己的ActionBar
调用设置为活动不是最佳解决方案。
请指导我这个,我已经搜索了很多教程但是找不到这种情况或使用NavigationSelection&amp; amp;片段在任何地方。
答案 0 :(得分:1)
片段是静态的。我很漂亮它可能以某种方式使它们工作,但对于动态生成/创建/删除,你想用Java做所有事情。
说,首先从XML中删除<fragment
,然后从创建活动中删除:
@覆盖 protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(...你的xml布局......);
// fragments are auto-re-created on rotation,
// so only create/put in layout one if not rotating
if(savedInstanceState == null){
// I'm assuming here your first fragment is position 0
gotoFragment(0);
}
}
然后在每个选择上只调用新的:
@Override
public boolean onNavigationItemSelected(int position, long id) {
gotoFragment(position);
return true;
}
这是更改屏幕上片段的一般方法。
private void gotoFragment(int position){
Fragment f = getFragmentManager().findFragmentByTag("position_" + position);
if(f == null){
switch(position){
case values:
f = // create here new object of your fragment for each position
}
}
getFragmentManager().beginTransaction()
.replace(R.id.container, f, "position_" + position)
.commit();
}