在我的一项活动中,当从意图接收到捆绑包时,我会创建一个线性布局和其他一些小部件。目前,每次我返回到该活动时,都会覆盖该布局。如何在不重写代码的情况下每次创建新布局?
法典:
public class FrontPageActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frontpage);
Bundle bundle = this.getIntent().getExtras();
try{
String size = bundle.getString("size");
int toppcount = bundle.getStringArrayList("toppings").toArray().length;
LinearLayout container = (LinearLayout)findViewById(R.id.container);
TextView t = new TextView(this);
TextView tprice = new TextView(this);
tprice.setGravity(Gravity.RIGHT);
LinearLayout inner = new LinearLayout(this);
LinearLayout.LayoutParams innerparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
inner.setLayoutParams(innerparams);
inner.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
inner.setPadding(10,10,10,10);
if(toppcount == 0){
t.setText(size+" Cheese Pizza");
}
else{
t.setText(size+" "+toppcount+" Topping Pizza");
}
tprice.setText(getPrice(size, toppcount)+"");
tprice.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
container.addView(inner);
inner.addView(t);
inner.addView(tprice);
}
catch(NullPointerException e){
}
final Intent sender = new Intent(this.getApplicationContext(), OrderPizzaActivity.class);
Button badd = (Button)findViewById(R.id.buttonaddpizza);
badd.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
startActivityForResult(sender, 0);
}
});
}
听起来您需要创建一个数据结构来保存 LinearLayouts,或者提供一个 ViewGroup 容器以供每次添加它们。
当前,您正在创建、修改然后覆盖try{} catch(){}
块中的相同LinearLayout
。我猜这是它不断覆盖的原因。
据我了解,您将新的"选项"添加到"最终订单"中。每次添加额外的浇头时,您都会创建一个布局并用特定数据填充它。并且您希望它又名订单列表。如果这个应用程序是关于什么的,你可以有一个应用程序级变量myOrder:List。添加配料(topping = new Order())并在FrontPageActivity中阅读列表。建议您为订单使用单独的布局。循环遍历订单会用数据填充布局,并在活动容器中膨胀。
伪想法:
MyApplication extends Application {
private static List<Order> mOrderList = null;
public MyApplication(){
mOrderList = new ArrayList<Order>();
}
public static List<Order> getOrderList(){
return mOrderList();
}
public static void addOrder(Order order) {
mOrderList.add(order);
}
}
期权活动:
MyApplication.add(order);
MyApplication.add(order);
首页活动
foreach(Order order : MyApplication.getOrderList()) {
// fill layout with order data
// inflate orderLayout into container
}