我有一个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);
}
}
答案 0 :(得分:0)
您可以使用其对象ID删除它,但是当从列表视图中删除它时,您必须创建一个名为refresh post list的方法,该方法在删除后实现,从列表视图中删除所有项目并查询它们从parse.com表到列表视图
答案 1 :(得分:0)
试试这个
ParseObject.createWithoutData("YourClassName","objectId").deleteEventually();