2014-09-25 3 views
0

Я немного новичок в разработке Parse и Android, поэтому, пожалуйста, извините меня, если этот вопрос является банальным или раздражающим. Я просмотрел все форумы Parse для хорошего способа удаления элементов из ParseQueryAdapter и не нашел ничего удовлетворительного.Удалить элемент из ParseQueryAdapter

Что я хочу, когда пользователь подтверждает элемент, который нужно удалить/добавить, этот элемент сразу же удаляется/добавляется в ListView и обновляет сервер анализа в фоновом режиме. Помогите?

final ParseUser currentUser = ParseUser.getCurrentUser(); 

    final ParseQueryAdapter<ParseObject> mainAdapter = 
      new ParseQueryAdapter<ParseObject>(this, new ParseQueryAdapter.QueryFactory<ParseObject>() { 
       public ParseQuery<ParseObject> create() { 
        // Here we can configure a ParseQuery to our heart's desire. 
        ParseQuery query = new ParseQuery("todo"); 
        //query.whereEqualTo("user", currentUser); 
        return query; 
       } 
      }); 
    mainAdapter.setTextKey("title"); 

    // Set the ListActivity's adapter to be the PQA 

    final ListView list = getListView(); 
    list.setAdapter(mainAdapter); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      final int pos = position; 

      new AlertDialog.Builder(thisactivity) 
        .setTitle("Confirmation Dialog") 
        .setMessage("Do you really want to delete it?") 
        .setIcon(android.R.drawable.ic_dialog_alert) 
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

         public void onClick(DialogInterface dialog, int whichButton) { 
          ParseObject toBeDeleted = mainAdapter.getItem(pos); 
          toBeDeleted.deleteInBackground(); 
          mainAdapter.loadObjects(); 
         }}) 
        .setNegativeButton(android.R.string.no, null).show(); 
     } 

    }); 

    final EditText todoName = (EditText)findViewById(R.id.todoName); 

    Button adder= (Button) findViewById(R.id.addTodo); 
    adder.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      addTodo(todoName.getText().toString(), currentUser); 
      todoName.setText(""); 
      InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      mgr.hideSoftInputFromWindow(todoName.getWindowToken(), 0); 
      mainAdapter.loadObjects(); 
     } 
    }); 

ответ

0

Возможно, я могу помочь вам с этой проблемой. Следующая процедура удаления:

private void delItem(Basket object) { 
    final ParseItems finalitem = object.getParseItem(); 
    ParseQuery<Basket> query = Basket.getQuery(); 
    query.setMaxCacheAge(TimeUnit.SECONDS.toMillis(1)); 

    query.setCachePolicy(ParseQuery.CachePolicy.NETWORK_ELSE_CACHE); 
    //query.fromLocalDatastore(); 
    query.whereEqualTo("parseItem", finalitem); 
    query.whereEqualTo("user", ParseUser.getCurrentUser()); 
    query.whereNotEqualTo("sent", true); 
    query.getFirstInBackground(new GetCallback<Basket>() { 
     @Override 
     public void done(final Basket basket, ParseException e) { 
      if (basket != null) { 
       basket.increment("quantity", -1); 
       basket.saveEventually(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         SuperToast superToast = new SuperToast(context); 
         superToast.setDuration(SuperToast.Duration.VERY_SHORT); 
         superToast.setText("del: " + finalitem.getName() + "-1=" + basket.getQuantity()); 
         superToast.setIcon(R.drawable.del, SuperToast.IconPosition.LEFT); 
         superToast.show(); 
        } 
       }); 
       if (basket.getQuantity() <= 0) { 
        basket.deleteEventually(new DeleteCallback() { 
         @Override 
         public void done(ParseException e) { 
          SuperToast superToast = new SuperToast(context); 
          superToast.setDuration(SuperToast.Duration.VERY_SHORT); 
          superToast.setText("remove: " + finalitem.getName()); 
          superToast.setIcon(R.drawable.del, SuperToast.IconPosition.LEFT); 
          superToast.show(); 
         } 
        }); 
       } 
      } 
     } 
    }); 
Смежные вопросы