2012-07-21 30 views
0

我希望有人可以提供幫助。ArrayAdapter替換列表而不是更新ListView

我有一個食物菜單應用程序。當用戶打開應用時,他們會看到一系列食物類別,例如「主菜」。我使用string-array從Strings.xml文件中提取這個列表。當選擇一個類別時,它會打開第二個佈局,顯示可以選擇的食品列表,但現在我的問題是:

當他們單擊某個項目(如牛排)時,它會將項目添加到所選項目佈局,但如果我回到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); 


    } 
} 

我HAVA試圖改變行 「myNewList.add(項目);」到「myNewList.addAll(item);」但後來我得到的錯誤:方法中的addAll(集合)在ArrayList類型是不適用的參數(字符串)

selecteditems.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並選擇另一個項目,它會替換我之前選擇的項目。我如何獲得它追加新項目?

回答

1

設置你的適配器只有一次,當你想要當您選擇MainCourse活動的項目,更新數據

使用adapter.notifyDataSetChange();

+0

我只看到適配器設置一次「selecteditems.setAdapter(myadapter);」我很抱歉,我在搞什麼? – Sobo 2012-07-21 13:48:54

0

,將其保存到數據庫表,然後把它抓回來的列表項活動。通過這種方式,每當您回到上一個活動並選擇一個項目時,它將被存儲在數據庫中,並且您可以使用ListItem活動中的以前的項目將其取回。

0

嗯,我明白你想交換你的ArrayAdapter其他數組。

在您的適配器類由ArrayAdapter擴展,把這個兩個階級,在活動swapItems致電(列表)

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; 
} 
相關問題