基于Bmob的即时通信(20)发动态界面

废话

今天我们来编写发动态界面

朋友圈功能是一项不错的主意,还记得当年QQ刚火的时候,QQ推出了QQ空间,那时候各种非主流说说在QQ空间随处可见,发动态成了年轻人的一种潮流,无论生活中发生了什么都可以往上面传,直到微信的出现,让发动态成为全民的潮流,以前是年轻人,现在不管是大人还是小孩都可以在上面发各种东西,所以,我们的聊天软件也需要朋友圈的功能,下面我们来看看如何编写

activity_add_post.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/add_post_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/add_post_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <EditText
            android:id="@+id/add_post_edit"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="left|top"
            android:background="@null"
            android:focusable="true"
            android:focusableInTouchMode="true"/>

    </android.support.v4.widget.NestedScrollView>

</LinearLayout>

可以看到,我们的朋友圈界面比较简单,顶上标题栏,下方一个Edittext占据了余下的所有空间,那可能有的人就会问“发布按钮在哪?”,发布按钮我打算放在标题栏上,这样,编辑区就会显得简洁

AddPostActivity.java

package com.yk.mchat.app.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

import com.yk.mchat.R;
import com.yk.mchat.model.contacts.User;
import com.yk.mchat.model.post.Post;

import cn.bmob.v3.BmobUser;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.SaveListener;

public class AddPostActivity extends AppCompatActivity {

    private View mView;

    private Toolbar mToolbar;

    private EditText mEditText;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_post);
        fbv();
        init();
        event();
    }

    /**
     * 获取控件
     */
    private void fbv() {
        mView = findViewById(R.id.add_post_view);
        mToolbar = findViewById(R.id.add_post_toolbar);
        mEditText = findViewById(R.id.add_post_edit);
    }

    /**
     * 初始化
     */
    private void init() {
        mToolbar.setTitle("编辑动态");
        setSupportActionBar(mToolbar);
        ActionBar actionBar=getSupportActionBar();
        if(actionBar!=null){
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }

    /**
     * 绑定事件
     */
    private void event() {

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_add_post_toolbar, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                break;
            case R.id.menu_add_post_publish:
                publish();
                break;
            default:
                break;
        }
        return true;
    }

    /**
     * 发表动态
     */
    private void publish(){
        String content=mEditText.getText().toString();
        if(!TextUtils.isEmpty(content)){
            User user= BmobUser.getCurrentUser(User.class);
            Post post=new Post();
            post.setContent(content);
            post.setUser(user);
            post.save(new SaveListener<String>() {
                @Override
                public void done(String s, BmobException e) {
                    if(e==null){
                        Snackbar.make(mView,"发表成功",Snackbar.LENGTH_LONG)
                                .setAction("返回", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                        finish();
                                    }
                                })
                                .show();
                    }else{
                        Snackbar.make(mView,"发表失败",Snackbar.LENGTH_LONG)
                                .setAction("重试", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View view) {
                                        publish();
                                    }
                                })
                                .show();
                    }
                }
            });
        }else{
            Snackbar.make(mView,"发表内容不能为空",Snackbar.LENGTH_LONG).show();
        }
    }
}

我们的Activity也比较简单,主要来看看发布按钮的点击事件

/**
 * 发表动态
 */
private void publish(){
    String content=mEditText.getText().toString();
    if(!TextUtils.isEmpty(content)){
        User user= BmobUser.getCurrentUser(User.class);
        Post post=new Post();
        post.setContent(content);
        post.setUser(user);
        post.save(new SaveListener<String>() {
            @Override
            public void done(String s, BmobException e) {
                if(e==null){
                    Snackbar.make(mView,"发表成功",Snackbar.LENGTH_LONG)
                            .setAction("返回", new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    finish();
                                }
                            })
                            .show();
                }else{
                    Snackbar.make(mView,"发表失败",Snackbar.LENGTH_LONG)
                            .setAction("重试", new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    publish();
                                }
                            })
                            .show();
                }
            }
        });
    }else{
        Snackbar.make(mView,"发表内容不能为空",Snackbar.LENGTH_LONG).show();
    }
}

可以看到,我们的发布按钮是通过上传到Bmob的后端数据库实现的,具体的实现代码里都写得比较详细

今天就到这里。

猜你喜欢

转载自blog.csdn.net/weixin_34291004/article/details/88108258