#java #android #listview #parse-platform #contextmenu
Вопрос:
У меня есть представление списка, содержащее в себе 4 объекта.Когда я долго нажимаю на один из них ,открывается меню с опцией «Удалить», в котором я могу удалить строку. Однако по какой-то причине я получаю неправильный объект строки,и я не могу понять, что я делаю неправильно.
Вот что я сделал:
Создание контекстного меню:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
// Get the list
feedListView = (ListView)v;
// Get the list item position
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
int position = info.position;
position -= feedListView.getHeaderViewsCount();
int finalPosition = position;
if (ParseUser.getCurrentUser().getUsername().equals(data.getUserName())){
Log.e("Test","Same user ObjectId = " ((AdapterView.AdapterContextMenuInfo) menuInfo).position);
if (v.getId()==R.id.feedListView) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mymenu, menu);
}
}else{
Log.e("Test","Not Your Post");
Toast.makeText(this, "Its not your post", Toast.LENGTH_SHORT).show();
}
}
Выбор из контекстного меню:
if (item.getItemId() == R.id.deleteMenu){
new AlertDialog.Builder(FeedActivity.this)
.setTitle("Are you sure ?")
.setMessage("Are you sure you want to delete this post?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Feed");
objects.get(finalPosition).deleteInBackground(new DeleteCallback() {
@Override
public void done(ParseException e) {
Log.e("Done","Item Deleted Successfully !!!");
arrayList.remove(finalPosition);
adapter.notifyDataSetChanged();
}
});
}
});
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
Спасибо
Ответ №1:
Поэтому я исправляю это, добавляя эти 2 строки:
Первый:
MyData Editdata = (MyData) adapter.getItem(position);
Для
MyData Editdata = (MyData) adapter.getItem(finalPosition);
Вторая строка, которую я добавил(я добавил ее, потому что мой список отображается таким же образом):
query.orderByDescending("updatedAt");