2010-11-08 119 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; 
    } 


} 

作品!