我想構建由ArrayAdapter支持的多行ListView。我希望列表中的每一行都有兩行,並在其旁邊有一個刪除按鈕。當點擊刪除按鈕時,應該刪除數組中的項目,並且ListView應該自行刷新。Android - 使用自定義ArrayAdapter添加和刪除多行ListView中的項目
這是在MainActivity的代碼,它有一個內部類是定製ArrayAdapter:
public class MainActivity extends Activity {
ArrayList<String> artistsList = new ArrayList<String>();
String[] artists = {"Matt Nathanson", "Green Day", "Three Days Grace", "LMFAO", "One Direction",
"Linkin Park", "Neon Trees", "Cee Lo Green", "Plain White T's", "Metallica", "Maroon 5",
"Sick Puppies", "Bruno Mars", "Billy Joel", "Don McLean", "Adele", "Gary Jules"};
ArrayList<String> songsList = new ArrayList<String>();
String[] songs = {"Come On Get Higher", "Holiday", "I Hate Everything About You", "Sexy and I Know It", "What Makes You Beautiful",
"What I've Done", "Animal", "Fuck You", "Hey There Delilah", "Sandman", "Moves Like Jagger",
"Rip Tide", "Talking to the Moon", "Piano Man", "American Pie", "Someone Like You", "Mad World"};
ListView list;
TestArrayAdapter mArrayAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for(String s : artists) {
artistsList.add(s);
}
for(String s : songs) {
songsList.add(s);
}
mArrayAdapter = new TestArrayAdapter();
list = (ListView)findViewById(R.id.mainlist);
list.setAdapter(mArrayAdapter);
}
class TestArrayAdapter extends ArrayAdapter<String> {
public TestArrayAdapter() {
super(MainActivity.this, R.layout.row, songs);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row=inflater.inflate(R.layout.row, parent, false);
TextView primaryTextView = (TextView)row.findViewById(R.id.primaryTextView);
TextView secondaryTextView = (TextView)row.findViewById(R.id.secondaryTextView);
primaryTextView.setText(songsList.get(position));
secondaryTextView.setText(artistsList.get(position));
ImageView deleteButton = (ImageView)row.findViewById(R.id.deleteRowButton);
deleteButton.setTag(position);
deleteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
artistsList.remove(v.getTag());
songsList.remove(v.getTag());
mArrayAdapter.notifyDataSetChanged();
}
});
return row;
}
}
調用notifyDataSetChanged()似乎並沒有做任何事情;但是,ArrayList中的項目正在被刪除。 ListView似乎獨立於我在ArrayLists和ArrayAdapter中所做的更改。理想情況下,當我從底層數據中刪除一個項目時,我應該能夠調用notifyDataSetChanged(),並且ListView將自行更新。
我已經看過類似的其他問題,但他們都只有一個ArrayList提供數據到ListView,我不知道如何適應這些解決方案的多行行。提前致謝。
非常感謝!本教程非常有幫助。我知道它刪除的項目。 – Cybran 2012-03-14 22:05:43