【问题标题】:How to add view to another layout如何将视图添加到另一个布局
【发布时间】:2015-10-11 20:09:47
【问题描述】:

所以,我有我的 MainActivity 及其布局 activity_main.xml。从这个活动中,当按下 Print 按钮时,我希望该活动发送用户输入的数据,并将 TextViews 添加到我的 @987654324 @ 将变成位图,然后发送到我的收据打印机。

在遇到 NullPointerException 让我头疼之后,我了解到在执行此操作 ll1= (LinearLayout) findViewById(R.id.layoutlista1); 之前,我必须先执行此操作 setContentView(R.layout.lista);。 问题是这会切换我看到的布局,当使用 setContentView 时,它会显示我的lista.xml。我想我可以通过使用setContentView(R.layout.activity_main) 来解决这个问题,但我很确定这不是应该做的事情来完成什么我想要。

所以我的问题是,如何在不出现 nullPointerException 的情况下将视图从当前活动布局添加到另一个布局?

这是我的lista.xml 布局:

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:text="S.C. INTER S.R.L."
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:text="GALATI" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:text="Data:" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:text="-----------------------------------------" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="1000" >

    <LinearLayout
        android:id="@+id/layoutlista1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_weight="500"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Nume produs" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutlista2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="250"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cantitate" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutlista3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="250"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Pret" />
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:text="-----------------------------------------" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TOTAL: " />

    <TextView
        android:id="@+id/totallista"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0.0" />
</LinearLayout>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:text="-----------------------------------------" />

这就是我初始化布局的方式:

    public LinearLayout ll1;
public LinearLayout ll2;
public LinearLayout ll3;
    setContentView(R.layout.lista);
ll1= (LinearLayout) findViewById(R.id.layoutlista1);
ll2= (LinearLayout) findViewById(R.id.layoutlista2);
ll3= (LinearLayout) findViewById(R.id.layoutlista3);

【问题讨论】:

  • 我认为您想使用LayoutInflater 加载一些布局并将其作为子级添加到其他一些布局中。但我不明白应该在哪里包含哪个布局。
  • 当我打开我的应用程序时,主活动以其布局启动 activity_main。在该活动中,我有一个按钮,必须将 TextViews 添加到另一个名为 lista.xml 的布局内的某些布局中。虽然我初始化我在它们上得到 nullPointerExceptions 的布局。为什么会这样?
  • Activity#findViewById() 只会在您使用setContentView 设置的视图层次结构中找到视图。它不会在另一个布局中找到它。但是您可以通过LayoutInflater 加载其他布局(返回View),然后在您在那里加载的布局上使用view.findViewById()。该布局不需要可见就可以工作
  • 这听起来像我需要的!我只是在研究 LayoutInflaters,但我找不到我需要的东西。你能给我一个答案,举一个我应该做什么的例子吗?

标签: java android xml layout


【解决方案1】:

嗯,如果您仍然想知道答案,那么您可以阅读这篇文章 How to inflate one view with a layout.

如果您仍然想知道如何初始化充气机,那么这将是另一种方式

LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

我从Inflate a view / layout into another layout? 得到了这个想法。我会尝试再写一次,希望这能有所帮助。没有检查它是否真的工作

//at first add contain view to main layout
setContentView(R.layout.activity_main);

//set reference to recently mail layout. Set id to your main layout
//change it to watever LinerLayout ...etc
RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.your_main_layout);

// create inflater 
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// infalate lista and infalate it to root - main layout in this case.
// check http://developer.android.com/reference/android/view/LayoutInflater.html for more

View view = (View) inflater.inflate(R.layout.lista, mainLayout, true);

// doing blah blah with view

好吧,我没有检查它是否有效,但 IMO 它应该有效。

【讨论】:

  • 我已经这样做了,它没有返回 NPE,但它也没有添加视图 ` View view; LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);视图 = inflater.inflate(R.layout.lista, null); LinearLayout ll1 = (LinearLayout) view.findViewById(R.id.layoutlista1); TextView temporar=new TextView(this); temporar.setText("测试"); ll1.addView(临时);`
  • ll1 现在膨胀了……您已经创建了临时视图并将其添加到 ll1。但是您是否添加了膨胀到 ContentView 的 ll1 视图???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多