【问题标题】:Android: Add TextView from one activty, to ListView in another activity through a button clickAndroid:通过单击按钮将一个活动中的TextView添加到另一个活动中的ListView
【发布时间】:2014-04-12 23:00:22
【问题描述】:

我的第一个活动中有一个文本视图,无法将其内容传递给第二个活动的列表视图。我正在尝试取一个食物名称并将其添加到菜单中。以下是我的接收活动。谁能告诉我如何解决这个问题?非常感谢提前

FoodItemActivity.java

public class FoodItemActivity extends Activity {

private TextView foodHeader;
private TextView foodPrice;


 @Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.food_layout_screen);

    // connect menuHeader to menuListHeaderTextview for the header, receives the intent from MainActivity below
    foodHeader = (TextView) findViewById(R.id.foodItemHeader);
    Intent i = getIntent();
    String menuItem = i.getStringExtra("childItem");
    foodHeader.setText(menuItem);

    addToOrderBtn();
    viewOrderBtn();

  }

    // add to order button
    public void addToOrderBtn(){

        Button addToOrder_Btn= (Button) findViewById(R.id.btn_addToOrder);
        addToOrder_Btn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0){

                foodHeader = (TextView)findViewById(R.id.foodItemHeader);
                //foodPrice = (TextView)findViewById(R.id.foodItemPrice);

                String sendHeader = foodHeader.getText().toString();
                //String sendPrice = foodPrice.getText().toString();


                 Intent myIntent = new Intent(FoodItemActivity.this, OrderActivity.class);
                 myIntent.putExtra("sendHeader", sendHeader);
                 //myIntent.putExtra("sendPrice", sendPrice);
                 startActivity(myIntent);
            }
        });
    }

    // view order button
    public void viewOrderBtn(){

        Button viewOrder_Btn= (Button) findViewById(R.id.btn_viewOrder);
        viewOrder_Btn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0){

                 Intent myIntent = new Intent(FoodItemActivity.this, OrderActivity.class);
                 startActivity(myIntent);
            }

        });             
    }       

OrderACtivity.java

public class OrderActivity extends ListActivity {

public ArrayList<String> orderList = new ArrayList<String>();
private String[] list;
private ArrayAdapter<String> adapter;
private ListView lv;
private String listItem;

@Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.order_screen);

    Intent i = new Intent();
    listItem = i.getStringExtra("sendHeader");
    // adds the received sata to ArrayList orderList
    orderList.add(listItem);


    // assign lv to order_screen's ListView component order_list
    lv = (ListView) findViewById(R.id.order_list);

    // convert ArrayList orderList to Array
    list = (String[]) orderList.toArray();

    // assign adapter to "this" context, with the layout page order_list_item, and the info obtained in list
    adapter = new ArrayAdapter<String>(this, R.layout.order_list_item, list); //R.id.order_food_name);
    // set the data behing lv to adapter
    adapter.notifyDataSetChanged();
    lv.setAdapter(adapter);





  }

【问题讨论】:

  • 怎么了?您是否尝试记录 ListItem,您收到值了吗?你的问题很模糊
  • 您正在使用Intent i = new Intent(); 创建一个新的Intent,然后调用listItem = i.getStringExtra("sendHeader"); - 为什么您认为您的Intent 中会有额外的字符串?如果这是接收数据的Activity 的代码,那么您应该使用getIntent(),它会为您提供Intent,它用于由第一个Activity 启动Activity

标签: java android eclipse listview


【解决方案1】:

您的 Arraylist 声明的问题,每次您传递意图时都会调用它的初始化并清除上次存储的值,因此您不会获得以前存储的值,因此最好的方法是在其他类中声明该 arraylist 并将接收到的值添加到该数组列表并将其传递给适配器。

【讨论】:

  • 有什么技巧可以做到这一点吗?
  • 在包内创建类,例如该类内的 TempValues 声明 public static ArrayList orderList = new ArrayList();并在您的 OrderActivity 活动中替换 orderList.add(listItem);与 TempValues.orderList.add(listItem);
  • 如果您的问题得到解决,然后接受答案。
  • 与我的解决方案或任何其他解决方案?如果由于答案而解决,则接受答案。
猜你喜欢
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2017-09-30
  • 2015-09-24
  • 1970-01-01
相关资源
最近更新 更多