gpt4 book ai didi

android - 在 LinearLayout 中的现有 fragment 下方动态添加 fragment

转载 作者:太空狗 更新时间:2023-10-29 14:11:21 26 4
gpt4 key购买 nike

我正在做一个 Activity ,其中有一个基于用户输入的地址的评论部分。用户将通过按下按钮添加一个新的评论部分。这是一个非固定数量的部分,所以我最初将这个部分作为一个 fragment 添加到 xml 中。我有一个 onClick 函数,可以将另一个 fragment 添加到线性布局。

我的问题是新 fragment 总是添加到 linearlayout 的顶部,即在现有 fragment 之上(即新 fragment 会将所有其他 fragment 向下推)。

如何添加新 fragment 以使其显示在现有 fragment 下方?

.java 文件中的代码:

public class SpecialReportAdden extends ActionBarActivity {
int numOfFragments;
LinearLayout addenHolder;


TextView report;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_special_report_adden);
numOfFragments=1;

Button addenSave = (Button)findViewById(R.id.btnAddendumSave);
Button addenAddComment = (Button)findViewById(R.id.btnAddendumAddComment);
addenHolder =(LinearLayout)findViewById(R.id.AddenLinLayHolder);

addenSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//this should save all comments including those added in dynamically produced fragments

//save database

Intent i = new Intent (SpecialReportAdden.this, MenuPage.class);
startActivity(i);
}
});


addenAddComment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("number of Fragments at start of OnClick", Integer.toString(numOfFragments));
Fragment newAddenFrag = addNewfragment(numOfFragments);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.AddenLinLayInnerHolder, newAddenFrag);
ft.addToBackStack(null);
ft.commit();

numOfFragments++;
Log.i("number of Fragments updated", Integer.toString(numOfFragments));
}
});
}


public Fragment addNewfragment(int number) {
AddendumLinInputFragment adden = new AddendumLinInputFragment();
TextView tx = (TextView) findViewById(R.id.txtVAddendumFragReportNum);
tx.setText("Report "+number+" :");
tx.setTextColor(Color.BLACK);
TextView address = (TextView)findViewById(R.id.txtVAddendumFragAddress);
address.setText("A new address");
address.setTextColor(Color.BLUE);
return adden;
}

.java Activity 的 xml 文件

<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.danielt.pestcontrol.SpecialReportAdden"
android:id="@+id/RellayAddenComments">

<TextView
android:id="@+id/txtVAddendumTitle" android:text="Service Report Addendum" android:textStyle="bold" android:layout_centerHorizontal="true" android:elegantTextHeight="true" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"/>

<TextView
android:id="@+id/txtVAddendumTechName"
android:layout_below="@+id/txtVAddendumTitle"
android:layout_marginTop="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Technician Name: "
android:textSize="18sp"
/>

<TextView
android:id="@+id/txtVAddendumDate"
android:layout_below="@+id/txtVAddendumTechName"
android:layout_marginTop="16dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Date: "
android:textSize="18sp"
/>
<ScrollView
android:id="@+id/scrlVAddendum"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtVAddendumDate">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/AddenLinLayHolder"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/AddenLinLayInnerHolder"
android:orientation="vertical">


<fragment
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:name="com.example.danielt.pestcontrol.AddendumLinInputFragment"
android:id="@+id/addendum1CommentsFragment"
android:layout_below="@+id/txtVAddendum1Date"
android:layout_marginTop="24dp"
tools:layout="@layout/fragment_addendum_lin_input" />
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add another Addendum Comment"
android:id="@+id/btnAddendumAddComment"
android:layout_below="@+id/scrlVAddendum"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save / Update Comments"
android:id="@+id/btnAddendumSave"
android:layout_below="@+id/btnAddendumAddComment"
android:layout_centerHorizontal="true"
android:layout_marginTop="44dp" />

</LinearLayout>


</ScrollView>

我还没有添加 fragment 代码,但如果有人想看,我会添加。感谢您的帮助。

最佳答案

您不需要 fragment 来仅保留评论 View 。只需膨胀新的评论 View 并​​将其添加到父 View 即可。

LayoutInflater inflater = LayoutInflater.from(context);
View inflatedLayout= inflater.inflate(R.layout.yourLayout, container, false);
container.addView(inflatedLayout);

容器是一个包含所有评论的 View 。

关于添加 fragment ,根据Fragments documentation :

If you're adding multiple fragments to the same container, then the order in which you add them determines the order they appear in the view hierarchy

因此,如果它的行为有所不同,则可能与操作系统版本或错误有关:)

关于android - 在 LinearLayout 中的现有 fragment 下方动态添加 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com