簡體   English   中英

刪除項目后Android ListView出現問題

[英]Problem with Android ListView after Items are removed

我似乎對Android ListView有問題。 我正在嘗試從ListView刪除選定的項目。 delete方法可以正常工作,可以讓我根據需要從列表中刪除任意多個項目,但是每當我滾動到列表的底部(刪除了至少1個項目之后),我都會收到錯誤消息,該錯誤會關閉應用程序。

這是我的代碼:

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;

        }

有任何想法嗎? 提前致謝。

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

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

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;
    }


}

作品!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM