#java #android #listview
#java #Android #listview
Вопрос:
ИЗВИНИТЕ ЗА ЭТУ ПУТАНИЦУ: ОБНОВЛЕННЫЙ ВОПРОС: я пытаюсь удалить элемент списка из listview. при нажатии на элемент отображается alertdialog. Если я нажму OK, то выбранный элемент должен быть удален из listview. Мой код приведен ниже:
case R.id.lvinc:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Delete Event ");
builder.setMessage("Delete this Event ?");
builder.setPositiveButton("Ok, Delete",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
try
{
???? //What code to delete the selected list item?
}catch(Exception e)
{
e.printStackTrace();
}
}
});
AlertDialog alert = builder.create();
alert.show();
displaylist();
break;
Любая помощь действительно ценится и заранее благодарна…
Комментарии:
1. Каков ваш актуальный вопрос? Заголовок вопроса и описание отличаются..
2. Извините за эту путаницу. Я обновил заголовок вопроса
3. С какой проблемой вы столкнулись при удалении элемента…
4. Я не знаю, как удалить элемент списка.
Ответ №1:
Я попытался решить эту проблему и получил одно решение, пожалуйста, ознакомьтесь с приведенным ниже кодом:
listview.java
public class listview extends Activity implements OnItemClickListener{
ListView list;
ListAdapter adapter;
ArrayList<String> nameArray;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//xml should have an ListView element
nameArray = new ArrayList<String>();
nameArray.add("Item1");
nameArray.add("Item2");
nameArray.add("Item3");
nameArray.add("Item4");
nameArray.add("Item5");
list = (ListView) findViewById(R.id.listView);
list.setOnItemClickListener(listview.this);
adapter=new ListAdapter(listview.this, nameArray);
list.setAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
showDialog(arg2);
}
@Override
protected Dialog onCreateDialog(final int id) {
Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Delete Event")
.setCancelable(true)
.setPositiveButton("Ok, Delete",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
nameArray.remove(id);
adapter=new ListAdapter(listview.this, nameArray);
list.setAdapter(adapter);
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
return super.onCreateDialog(id);
}
}
// Класс адаптера
ListAdapter.java
public class ListAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<String> name;
private static LayoutInflater inflater=null;
public ListAdapter(Activity a, ArrayList<String> nameArray) {
activity = a;
name = nameArray;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return name.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder{
public TextView text;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.list_item, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.title);
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
holder.text.setText(name.get(position));
return vi;
}
}
Комментарии:
1. Я думаю, notifyDataChanged все же лучше, чем воссоздание нового адаптера 😉
Ответ №2:
Я не знаю, какие данные вы используете.
Я представляю курсор, базу данных или список, не стесняйтесь сообщать нам, так будет легче помочь.
Этот пример предназначен для списка:
protected void onListItemClick(View v, int pos, long id) {
Log.i(TAG, "onListItemClick id=" id);
//Display your Dialog
(...)
builder.setPositiveButton("Ok, Delete",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
myList.remove(pos);
myAdapter.notifyDataChanged();
}
});
}
Комментарии:
1. Я использую OnItemClickListener, который был реализован с помощью Activity
2. да, но вам нужно добавить эти 2 строки: myList.remove(pos); MyAdapter.notifyDataChanged();
Ответ №3:
Возможно, у вас есть какой-то адаптер, который вы передаете с какими-то данными.
Удалите элемент из этого списка и передайте notifyDataChanged в ListView.
И, наконец: dialog.dismiss();
Ответ №4:
itemLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
indexClick = position;
}
}
if ((indexClick) == (position)) {
itemLayout.setBackgroundResource(R.drawable.tab_select);
}
в противном случае поместите изображение tab_unselected.