[英](Android)listview divider removed, but still show blue line after click
[英]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.