Получение неправильной строки синтаксического анализа объекта

#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");