所以,我的MainActivity
布局为activity_main.xml
。在此活动中,当按下Print
按钮时,我希望该活动发送用户输入的数据,以及将TextView添加到我的lista.xml
,它将变为位图,然后发送到我的收据打印机。
在获得NullPointerException之后,我已经知道在执行此setContentView(R.layout.lista);
之前我必须执行类似ll1= (LinearLayout) findViewById(R.id.layoutlista1);
之类的操作。
问题是这会切换我看到的布局,当使用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);
答案 0 :(得分:2)
嗯,如果你仍然想知道答案,那么你可以阅读这篇文章 How to inflate one view with a layout
如果您仍然想知道如何初始化inflater,那么这将是另一种方式
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它应该工作。