ahm*_*och 5 android android-layout android-fragments android-viewpager
我在FragmentStatePagerAdapter中有3个选项卡.我有一个标签1的片段,它动态地在相对布局中为其'linearlayout'容器添加视图.我在tab 1片段中动态添加一些视图.我还在该linearLayout容器中添加了一个完整的片段,其中包含其他视图.这很好..每件事都很好.
但是当我去第3页然后回来.所有观点都在那里.但是那个完整的片段已经消失了~~
编辑
它从tab1消失并出现在tab2中的视图下方,其中添加了另一个子片段..
首先,我在tab1和tab2中有一个listFragment.基于listItem单击我在每个选项卡中加载一个片段,tab1和2中的两个片段在xml下面膨胀相同并添加动态视图,但在某些情况下,我在xml中给出的线性布局中添加一个完整的片段而不是视图. 问题出现了,当我必须在这两个新增加的片段选项卡1和TAB2添加两个片段,之后有只列出,并滑到TAB3.回来了.'tab1主片段'中的片段消失并出现在'tab2主片段'中的片段下方
这是viewpager,我通过方法setItem(片段,位置)更改不同的片段:
public static class ScreenSlidePagerAdapter extends
FragmentStatePagerAdapter {
public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
3);
public ScreenSlidePagerAdapter(FragmentManager fm,
ArrayList<Fragment> tabs) {
super(fm);
ScreenSlidePagerAdapter.tabs_fragments = tabs;
}
@Override
public Fragment getItem(int arg0) {
return tabs_fragments.get(arg0);
}
@Override
public int getCount() {
return tabs_fragments.size();
}
@Override
public int getItemPosition(Object object) {
if (tabs_fragments.contains(object)) {
return POSITION_UNCHANGED;
}
return POSITION_NONE;
}
public static void setItem(Fragment fr, int position) {
if (position <= 2 && position >= 0) {
tabs_fragments.remove(position);
tabs_fragments.add(position, fr);
} else
Log.d("adding tab", "wrong tab position to add fragment at");
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我将我的片段添加到linearlayout的方式,其中'll'是相对布局中的线性布局,即tab1上片段的实际内容视图
ll.addView(getTitle("Set Message Receive Settings"));
// View smsRecLayout = inflater.inflate(R.layout.fr_ev_sms_receive,
// container, false);
Bundle b = new Bundle();
b.putInt("id", eventId);
b.putInt("event", eventTypeId);
Fragment fr = new FrEv_SMSReceive();
fr.setArguments(b);
getFragmentManager().beginTransaction()
.add(ll.getId(), fr, "fr_sms_receive").commit();
Run Code Online (Sandbox Code Playgroud)
这是片段的布局,其中另一个片段以线性布局'fr_event_container'添加.FragmentStatePagerAdapter
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".EventDetails" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:gravity="center_horizontal"
android:padding="10dp"
android:textIsSelectable="false" />
<ScrollView
android:id="@+id/fr_event_container_scroll"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/sep1"
android:layout_alignParentLeft="true"
android:layout_below="@+id/title" >
<LinearLayout
android:id="@+id/fr_event_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<View
android:id="@+id/sep1"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_above="@+id/addOther"
android:layout_centerHorizontal="true"
android:layout_margin="10dp"
android:background="#000"
android:padding="10dp"
android:visibility="gone" />
<Button
android:id="@+id/next"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/addOther"
android:layout_alignBottom="@+id/addOther"
android:layout_alignParentRight="true"
android:layout_marginRight="54dp"
android:text="Next"
android:width="90dp" />
Run Code Online (Sandbox Code Playgroud)
我发现问题在于两个选项卡使用相同的布局,而没有在运行时更改其 Id setId;
虽然片段位于不同的选项卡中,但 Android 会将首先添加的布局视为主要布局,因此,如果我在 tab1 之后在 tab2 中添加片段,那么在该布局的 tab2 或 tab2 版本中添加的任何内容都会在 tab1 中(首先添加) 。
我在运行时更改了layoutIds,问题解决了。
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |