Android仿QQ空间发表动态

效果展示图:

功能描述:用户点击+会进入发表动态的界面,发表成功后跳转到个人首页。

后续完善:增加个人头像的上传,对界面进行优化,增加点赞和评论的功能。

主要采用listview对内容进行展示,对sqlite数据库进行增加和查询。

代码:

adapter

package com.example.yunzhi.adapter;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.yunzhi.R;
import com.example.yunzhi.utils.Bean;

import java.util.List;

public class Temp extends RecyclerView.Adapter<Temp.TempViewHolder>{

    private Context mContext;
    private List<Bean> list;
    public Temp (Context context, List<Bean> list){
        this.mContext=context;
        this.list=list;
    }
    public void setList(List<Bean> list) {
        this.list=list;//构造方法的作用
    }
    @NonNull
    @Override
    public TempViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        TempViewHolder holder=new TempViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_recycler_view,parent,false));
        return holder;

    }

    @Override
    public void onBindViewHolder(@NonNull TempViewHolder holder, int position) {
        final Bean item=list.get(position);

        holder.home_tv2.setText(item.getContents());
        holder.home_tv3.setText(item.getDate());

    }

    @Override
    public int getItemCount() {
        return list==null?0:list.size();
    }


    //绑定单元格空间
    class TempViewHolder extends RecyclerView.ViewHolder{
//            ImageView home_me;
//            TextView home_tv1;
            TextView home_tv2;
            TextView home_tv3;//时间


        public TempViewHolder(@NonNull View itemView) {
            super(itemView);

//            home_me=itemView.findViewById(R.id.home_me);
//            home_tv1=itemView.findViewById(R.id.home_tv1);
            home_tv2=itemView.findViewById(R.id.home_tv2);
            home_tv3=itemView.findViewById(R.id.home_tv3);
        }
    }

}

service

package com.example.yunzhi.service;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
    static String name="test.db";
    static int dbVersion=1;
    public DatabaseHelper(Context context) {
        super(context, name, null, dbVersion);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table info(id integer primary key autoincrement,contents varchar(255),date varchar(20))";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists info");//用户注册的表
        onCreate(db);
    }
}
package com.example.yunzhi.service;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.yunzhi.utils.Bean;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class UserService {
    private DatabaseHelper dbHelper;
    public UserService(Context context){dbHelper=new DatabaseHelper(context);}

    //发表说说的功能
    public boolean publish(Bean bean){
        SQLiteDatabase sdb=dbHelper.getReadableDatabase();
        Date date0 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String date = simpleDateFormat.format(date0);
        String sql="insert into info(contents,date) values(?,?)";
        Object obj[]={bean.getContents(),date};
        sdb.execSQL(sql,obj);
        return true;
    }
    public List<Bean> queryAll(){
        List<Bean> list=new ArrayList<>();
        Bean bean=null;
        SQLiteDatabase db=dbHelper.getReadableDatabase();
        Cursor c=db.query("info",null,null,null,null,null,null,null);
        if(c!=null&&c.getCount()>0){
            list=new ArrayList<>();
            while(c.moveToNext()){
                bean=new Bean();
                bean.setContents(c.getString(c.getColumnIndex("contents")));
                bean.setDate(c.getString(c.getColumnIndex("date")));
                bean.setId(c.getInt(c.getColumnIndex("id")));
                list.add(bean);
            }
        }
        return list;
    }

}

utils

package com.example.yunzhi.utils;

public class Bean {
    private int id;
    private String contents;
    private String date;

    public Bean() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getContents() {
        return contents;
    }

    public void setContents(String contents) {
        this.contents = contents;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public Bean(int id, String contents, String date) {
        this.id = id;
        this.contents = contents;
        this.date = date;
    }
}
AddActivity
package com.example.yunzhi;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.yunzhi.service.UserService;
import com.example.yunzhi.utils.Bean;

import java.text.SimpleDateFormat;
import java.util.Date;

public class AddActivity extends AppCompatActivity {

    private Button add_back;
    private Button add_pb;
    private EditText add_ed1;
    private TextView add_tv3;
    Date date0 = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    String date = simpleDateFormat.format(date0);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        findViews();
        add_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(AddActivity.this,HomeActivity.class);
                startActivity(intent);
            }
        });
        add_pb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String contents=add_ed1.getText().toString();
                System.out.println(contents);
                String time=add_tv3.getText().toString();
                Log.i("TAG", contents + "_" + time);
                UserService userService=new UserService(AddActivity.this);
                Bean bean=new Bean();
                bean.setContents(contents);
                bean.setDate(time);
                userService.publish(bean);
                Intent intent=new Intent(AddActivity.this,HomeActivity.class);
                Toast.makeText(AddActivity.this,"发表成功",Toast.LENGTH_LONG).show();
                startActivity(intent);
            }
        });
    }

    private void findViews() {
        add_back = findViewById(R.id.add_back);
        add_pb=findViewById(R.id.add_pb);
        add_ed1=findViewById(R.id.add_ed1);
        add_tv3=findViewById(R.id.add_tv3);
        add_tv3.setText(date);
    }
}
MainActivity
package com.example.yunzhi;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private Button btn1;
    private Button btn7;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViews();
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,HomeActivity.class);
                startActivity(intent);
            }
        });
        btn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,TreeActivity.class);
                startActivity(intent);
            }
        });
    }

    private void findViews() {

        btn1 = findViewById(R.id.my_btn_3);
        btn7=findViewById(R.id.my_btn_7);
    }
}
HomeActivity
package com.example.yunzhi;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import com.example.yunzhi.adapter.Temp;
import com.example.yunzhi.service.UserService;
import com.example.yunzhi.utils.Bean;

import java.util.List;

public class HomeActivity extends AppCompatActivity {

    private ImageView home_add;
    private RecyclerView rec;
    private final Activity mContext=HomeActivity.this;
    private UserService userDao;
    private Temp adapter;

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

        home_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(HomeActivity.this,AddActivity.class);
                startActivity(intent);
            }
        });
    }

    private void initDate() {
        userDao =new UserService(mContext);
        List<Bean> list=userDao.queryAll();
        adapter=new Temp(mContext,list);
        rec.setAdapter(adapter);
    }


    private void findViews() {
        home_add = findViewById(R.id.home_add);
        rec=findViewById(R.id.rec);
        rec.setLayoutManager(new LinearLayoutManager(mContext));
        DividerItemDecoration divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
        divider.setDrawable(ContextCompat.getDrawable(this,R.drawable.recycler_item));
        rec.addItemDecoration(divider);
    }
}

layout

main

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/my_1"
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:text="我"
        android:gravity="center"/>



    <RelativeLayout
        android:id="@+id/my_info_1"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_marginTop="10dp"
        android:background="@color/white"
        android:padding="20dp">

        <ImageView
            android:id="@+id/my_btn_1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentLeft="true"
            android:background="@drawable/main_view_1"/>

        <TextView
            android:id="@+id/my_text_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="23dp"
            android:layout_toRightOf="@id/my_btn_1"
            android:text="用户"
            android:textSize="30sp"
            android:textStyle="bold"/>

        <ImageView
            android:id="@+id/my_btn_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="-79dp"
            android:src="@mipmap/erweima" />
    </RelativeLayout>

    <Button
        android:id="@+id/my_btn_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@color/white"
        android:drawableLeft="@mipmap/home_in"
        android:text="个人空间"
        android:gravity="center_vertical"
        android:drawablePadding="15dp"
        android:textSize="25sp"
        />
    <Button
        android:id="@+id/my_btn_4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:layout_marginTop="10dp"
        android:drawableLeft="@mipmap/in_class"
        android:text="我的课程"
        android:gravity="center_vertical"
        android:textSize="25sp"
        android:drawablePadding="9dp"/>
    <Button
        android:id="@+id/my_btn_5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:layout_marginTop="10dp"
        android:drawableLeft="@mipmap/book"
        android:text="笔记本"
        android:textSize="25sp"
        android:gravity="center_vertical"
        android:drawablePadding="15dp"/>
    <Button
        android:id="@+id/my_btn_6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:layout_marginTop="10dp"
        android:drawableLeft="@mipmap/set"
        android:text="设置"
        android:textSize="25sp"
        android:gravity="center_vertical"
        android:drawablePadding="15dp"/>
    <Button
        android:id="@+id/my_btn_7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:layout_marginTop="10dp"
        android:drawableLeft="@mipmap/set"
        android:text="思维导图"
        android:textSize="25sp"
        android:gravity="center_vertical"
        android:drawablePadding="15dp"/>





</LinearLayout>
View Code

home

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".HomeActivity">

<RelativeLayout
    android:id="@+id/line1"
    android:layout_width="match_parent"
    android:padding="10dp"
    android:layout_height="200dp">
    <ImageButton
        android:id="@+id/home_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/back"
        android:background="@color/white"/>

    <ImageView
        android:id="@+id/home_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/add"
        android:layout_alignParentRight="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="个人空间"
        android:layout_marginLeft="130dp"
        android:textSize="25dp"/>

    <ImageView
        android:id="@+id/home_me"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_below="@+id/home_back"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="60dp"
        android:background="@drawable/main_view_1" />
    <ImageView
        android:id="@+id/home_see"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/eye"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/home_add"
        android:layout_marginTop="60dp"
        android:layout_marginRight="150dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="总成长值:"
        android:layout_alignParentRight="true"
        android:layout_marginTop="95dp"
        android:layout_marginRight="60dp"
        android:textSize="15dp"/>
</RelativeLayout>
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/black"/>
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="56dp" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rec"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="17dp" />

</LinearLayout>
View Code

add

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AddActivity"
    android:orientation="horizontal">

    <RelativeLayout
        android:id="@+id/add_r1"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@color/blue">
        <Button
            android:id="@+id/add_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消"
            android:background="#00000000"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="发动态"
            android:textSize="25dp"
            android:layout_centerInParent="true"/>
        <Button
            android:id="@+id/add_pb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发表"
            android:layout_alignParentRight="true"
            android:background="@null"/>
    </RelativeLayout>
    <View
        android:id="@+id/view_1"
        android:layout_below="@+id/add_r1"
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@color/block"/>

    <RelativeLayout
        android:id="@+id/add_r2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/view_1">

        <TextView
            android:id="@+id/add_tv2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="用户名"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/add_tv3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/add_tv2"
            android:textSize="15dp"/>


     <EditText
         android:id="@+id/add_ed1"
         android:layout_below="@+id/add_tv3"
         android:textSize="25dp"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="快来记录一下今天的成长吧!"/>
    </RelativeLayout>
View Code

 

posted @ 2021-04-29 17:22  天岁  阅读(661)  评论(2编辑  收藏  举报