繁体   English   中英

Parse.com和Android:如何从ListView中删除Parse.com上的一行

[英]Parse.com & Android: How do i delete a row on Parse.com from my ListView

我有一个parse.com数据库,用于填充列表视图行。 它的工作原理如下。 每次用户发布新内容时,都会在Parse.com类中添加一个新行。 如果他希望删除帖子,我希望应用程序提示用户长按一下。 如果他选择是,则从列表视图和parse.com中删除帖子。 我没有包括我的布局文件,但如果你需要它我可以发布。 这是我的代码:

聊天活动:(显示发送的所有消息)

公共类ChatActivity扩展ListActivity {

protected List<ParseObject> mStatus;
protected Button mPost;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);
    mPost=(Button)findViewById(R.id.postChat);
    mPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(ChatActivity.this,MessageActivity.class);
            ChatActivity.this.startActivity(intent);
        }
    });

    ParseUser currentUser=ParseUser.getCurrentUser();
    if(currentUser!=null)
    //Event for filling list view
    {
        ParseQuery<ParseObject> query=new ParseQuery<ParseObject>("Chat");
        query.orderByDescending("createdAt");
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> status, ParseException e) {
                if(e==null)
                {//Event for a successful post
                    mStatus=status;
                    ChatAdapter adapter=new ChatAdapter(getListView().getContext(),mStatus);
                    setListAdapter(adapter);
                }
                else
                {//Event for a failed post

                }
            }
        });
    }
    else
    //Event in case user is not logged on
    {   Intent main = new Intent(ChatActivity.this, LoginActivity.class);
        ChatActivity.this.startActivity(main);
        ChatActivity.this.finish();}
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_profile, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //switch for menu events
    switch(id)
    {case R.id.LogoutChatMenu:
        {//logout the user
            ParseUser.logOut();
            //Take user back to login
            Intent intent = new Intent(ChatActivity.this, LoginActivity.class);
            ChatActivity.this.startActivity(intent);
            ChatActivity.this.finish();
            Toast.makeText(getApplicationContext(), "LOGOUT SUCCESSFUL.", Toast.LENGTH_LONG).show();
            break;}}

    return super.onOptionsItemSelected(item);
}
@Override
public void onListItemClick(ListView l,View v, int position, long id)
{
    super.onListItemClick(l,v,position,id);
    ParseObject statusObject=mStatus.get(position);
    String objectId=statusObject.getObjectId();

    Intent intent = new Intent(ChatActivity.this, ChatDetailView.class);
    intent.putExtra("objectId",objectId);
    ChatActivity.this.startActivity(intent);

}

}

CHAT ADAPTER(用于处理填充ListView的适配器)

公共类ChatAdapter扩展ArrayAdapter {

protected Context mContext;
protected List<ParseObject> mStatus;

//Status adapter for the list view
public ChatAdapter(Context context, List<ParseObject> Chat) {
    super(context, R.layout.chatcustomlayout, Chat);
    mContext = context;
    mStatus = Chat;
}

//Event to fill each row of the list view
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    //Event to create a new view
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.chatcustomlayout, null);
        holder = new ViewHolder();
        //Adds username to holder
        holder.usernameProfile = (TextView) convertView
                .findViewById(R.id.usernameCustom);
        //Adds status to holder
        holder.statusProfile = (TextView) convertView
                .findViewById(R.id.statusCustom);

        convertView.setTag(holder);
    } else {
        //Event for a view that already exists
        holder = (ViewHolder) convertView.getTag();

    }

    ParseObject statusObject = mStatus.get(position);

    // Display username in holder
    String username = statusObject.getString("User");
    holder.usernameProfile.setText(username);

    // Display status in holder
    String status = statusObject.getString("newStatus");
    holder.statusProfile.setText(status);

    return convertView;
}
//Initialising variables
public static class ViewHolder {
    TextView usernameProfile;
    TextView statusProfile;

}

}

消息活动:(用于输入消息和发送)

公共类MessageActivity扩展Activity {

protected EditText mUpdateStatus;
protected Button mUpdateStatusButton;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_message);

    //initialization of variables
    mUpdateStatus=(EditText)findViewById(R.id.messageMessage);
    mUpdateStatusButton=(Button)findViewById(R.id.sendMessage);

    //code update button click event
    mUpdateStatusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Get current user
            ParseUser currentUser=ParseUser.getCurrentUser();//Identifies current user
            String currentUserUsername=currentUser.getUsername();//stores username in variable

            //Create new variable to store strings
            String newStatus=mUpdateStatus.getText().toString();

            //Event for an empty status
            if (newStatus.isEmpty())
            {AlertDialog.Builder builder=new AlertDialog.Builder(MessageActivity.this);
                builder.setMessage("STATUS SHOULD NOT BE EMPTY.");
                builder.setTitle("OOPS!");
                builder.setPositiveButton("OK",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                AlertDialog dialog=builder.create();
                dialog.show();}
            else{
                //Save the status in Parse.com
                ParseObject statusObject = new ParseObject("Chat");//Create a new parse class
                statusObject.put("newStatus",newStatus);//Creates a new attribute and adds value from newStatus
                statusObject.put("User",currentUserUsername);//Stores username in new parse class

                //Save data and initiate callback method
                statusObject.saveInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if(e==null)
                        {//Event for a Successful storage
                            Toast.makeText(MessageActivity.this,"MESSAGE SENT.",Toast.LENGTH_LONG).show();

                            //Take user back to profile
                            Intent main = new Intent(MessageActivity.this, ChatActivity.class);
                            MessageActivity.this.startActivity(main);

                        }
                        else
                        {//Event for an Unsuccessful storage
                            AlertDialog.Builder builder=new AlertDialog.Builder(MessageActivity.this);
                            builder.setMessage(e.getMessage());
                            builder.setTitle("SORRY!");
                            builder.setPositiveButton("OK",new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });
                            AlertDialog dialog=builder.create();
                            dialog.show();
                        }
                    }
                });}

        }
    });

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_message, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    switch(id) {
        case R.id.logoutMessageMenu:
        {//logout the user
            ParseUser.logOut();
            //Take user back to login
            Intent intent = new Intent(MessageActivity.this, LoginActivity.class);
            MessageActivity.this.startActivity(intent);
            MessageActivity.this.finish();
            Toast.makeText(getApplicationContext(), "LOGOUT SUCCESSFUL.", Toast.LENGTH_LONG).show();
            break;}
    }

    return super.onOptionsItemSelected(item);
}

}

您可以使用其对象ID删除它,但是当从列表视图中删除它时,您必须创建一个名为refresh post list的方法,该方法在删除后实现,从列表视图中删除所有项目并从解析中查询它们。 com表到列表视图

尝试这个

ParseObject.createWithoutData("YourClassName","objectId").deleteEventually();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM