0

我希望有人能帮帮忙。

我有一个食物菜单应用程序。当用户打开应用程序时,他们会看到一个食物类别列表,例如“主菜”。我正在使用字符串数组从 Strings.xml 文件中提取此列表。选择一个类别后,它会打开第二个布局,显示可以选择的食品列表,我现在的问题是:

当他们单击 Steak 之类的项目时,它会将 Item 添加到 selecteditems 布局中,但如果我返回 ListMenu(按手机上的后退按钮)并选择另一个项目,它会替换我之前选择的项目。我怎样才能让它附加新项目?

这是我的文件和代码:

mainCoarse.java

package com.mycompany.lunch;

import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ListMenu extends ListActivity {

List<String> itemordered = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maincoarsemain);
    final ListView lv=(ListView)findViewById(R.id.listView1);

    final ArrayList<String> myNewList = new ArrayList<String>();

    ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this, R.array.maincoarse_menu,android.R.layout.simple_list_item_1);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub


            String item=lv.getItemAtPosition(arg2).toString();
            String itemordered;
            itemordered = item + " added to list";
            Toast.makeText(getApplicationContext(), itemordered, Toast.LENGTH_LONG).show();

            myNewList.add(item);
            ListView newList = (ListView) findViewById(R.id.menu_item);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListMenu.this, myNewList, android.R.layout.simple_list_item_1);
            newList.setAdapter(adapter);

            // Launching new Activity on selecting List Item
            Intent i = new Intent(getApplicationContext(), ListItem.class);
            // sending data to new activity
            i.putExtra("item", item);
            startActivity(i);   
        }
        });
    }
}

ListItem.java

import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListItem extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.selecteditems);

    Intent i = getIntent();

    ArrayList<String> myNewList = new ArrayList<String>();
    String item = i.getStringExtra("item");

    myNewList.add(item);
    ListView selecteditems = (ListView) findViewById(R.id.listitems);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListItem.this, android.R.layout.simple_list_item_1, myNewList);
    selecteditems.setAdapter(adapter);


    }
}

我已经尝试更改“myNewList.add(item);”行 到“myNewList.addAll(item);” 但后来我收到错误:ArrayList 类型中的方法 addAll(Collection) 不适用于参数 (String)

选定项目.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:background="@drawable/main_background" 
  android:paddingLeft="10.0dip" 
  android:paddingTop="0.0dip" 
  android:paddingRight="10.0dip" 
  android:paddingBottom="10.0dip" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="100.0dip"
            android:background="@drawable/title" />

        <LinearLayout 
            android:orientation="horizontal" 
            android:background="@drawable/head" 
            android:layout_width="fill_parent" 
            android:layout_height="10.0dip" />    

          <ListView 
              android:id="@+id/listitems"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textSize="25dip"
              android:textStyle="bold"
              android:padding="10dip"
              android:textColor="#ffffff"/>

</LinearLayout>

摘要:它将项目添加到新的 selecteditems 布局中,但如果我返回 ListMenu 并选择另一个项目,它会替换我之前选择的项目。我怎样才能让它附加新项目?

4

3 回答 3

1

仅在您想要更新数据时设置一次适配器

利用adapter.notifyDataSetChange();

于 2012-07-21T13:36:12.173 回答
0

当您在 MainCourse 活动中选择一个项目时,将其保存到数据库表中,然后在 List item 活动中取回它。这样,每次当您移回上一个活动并再选择一个项目时,它将存储在数据库中,您可以将其与 ListItem 活动中的先前项目一起取回。

于 2012-07-21T13:41:30.123 回答
0

好吧,我知道你想用其他数组交换你的 ArrayAdapter。

在由 ArrayAdapter 扩展的 Adapter 类上,放置这两个类并调用 Activity swapItems(List)

public void swapItems(List<Object> newList){
    List<Object> oldList = this.getAllAdapterList();
    List<Object> swapList;
    if (newList.size() >= oldList.size()) {
        swapList = newList;
    } else {
        swapList = oldList;
    }
    for (int i = 0; i<swapList.size();i++) {
        if (i < newList.size()) {
            this.insert(newList.get(i), i);
        }
        if(i < oldList.size()) {
            this.remove(oldList.get(i));
        }

    }

    this.notifyDataSetChanged();
}


public List<Object> getAllAdapterList(){
    int count = this.getCount();
    List<Object> objVal = new ArrayList<Object>();

    for (int i = 0; i < count; i++) {
        objVal.add(this.getItem(i));
    }
    return objVal;
}
于 2015-06-24T11:24:29.997 回答