2014-09-25 94 views
0

我对Parse和Android开发有点新,所以请原谅,如果这个问题是陈腐或讨厌。我已经在Parse论坛中寻找了从ParseQueryAdapter中删除项目的好方法,但没有找到任何令人满意的方法。从ParseQueryAdapter删除项目

我想要的是,当用户确认要删除/添加的项目时,该项目被立即删除/添加到ListView并在后台更新Parse服务器。帮帮我?

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(); 
         } 
        }); 
       } 
      } 
     } 
    });