2010-11-08 156 views
0

我似乎遇到了Android ListView的問題。我試圖從ListView中刪除選定的項目。刪除方法正在工作,並將允許我根據需要從列表中刪除儘可能多的項目,但每當滾動到列表的底部時(至少刪除1個項目後),都會出現一個關閉應用程序的錯誤。刪除項目後的Android ListView問題

這裏是我的代碼:

public class MainActivity extends Activity { 

    private String[] mRoute; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mRoute = getResources().getStringArray(R.array.countries); 

    ListView list = (ListView)findViewById(R.id.list); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem,  mRoute); 

    list.setAdapter(adapter); 

    registerForContextMenu(list); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

     AdapterView.AdapterContextMenuInfo info (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
     int menuItemIndex = item.getItemId(); 
     String[] menuItems = getResources().getStringArray(R.array.menu); 
     String menuItemName = menuItems[menuItemIndex]; 
     String listItemName = mRoute[info.position]; 

     // Remove String From List 
     List<String> routeArrayString = new ArrayList<String>(Arrays.asList(mRoute)); 
    routeArrayString.remove(listItemName); 
    mRoute = routeArrayString.toArray(mRoute); 

     //Generate new ListView 
     ListView list = (ListView)findViewById(R.id.list); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, mRoute); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 

     return true; 

     } 

任何想法?提前致謝。

+1

什麼是錯誤信息? – Brandon 2010-11-08 19:11:43

+0

使用logcat向我們顯示錯誤消息的完整堆棧跟蹤。 – 2010-11-08 19:46:31

回答

0

發生什麼錯誤?無論如何,你的代碼有點難看,應該用另一種方式寫。你應該使用你的適配器,因爲它就像是ListView和實際數據之間的橋樑。 BasicAdapter具有通知數據更改的特殊方法,只需繼承自己的適配器並通過適配器直接操作數據即可。

+0

錯誤:Android意外停止。 你的意思是BaseAdapter? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html – j3ffz 2010-11-08 19:14:06

+0

看看logcat並給出更具體的錯誤描述,必定會發生異常。 – endryha 2010-11-08 20:03:34

0

我認爲向我的適配器中的陣列添加項目是個問題。

public class MainActivity extends ListActivity { 

    private ArrayAdapter<String> dataAdapter; 
    private static final int REMOVE_ITEM = 1; 

    private String[] mRoute = {"One", "Two", "Three", "Four", "Five"}; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     dataAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.itemName); 

     for (int i = 0; i < mRoute.length; i++) { 
      dataAdapter.add(mRoute[i]); 
     } 

     setListAdapter(dataAdapter); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     Resources resource = getApplicationContext().getResources(); 
     menu.add(Menu.NONE,REMOVE_ITEM, REMOVE_ITEM, "REMOVE ITEM"); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     switch (item.getItemId()) 
     { 
     case REMOVE_ITEM: 
      dataAdapter.remove(dataAdapter.getItem(dataAdapter.getCount() - 1)); 
      break; 
     } 
     return false; 
    } 


} 

作品!