• 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
  • 相关阅读:
    Unity异步加载场景loading条
    (转)Unity3D命令行Build
    (转)Unity3d UnityEditor编辑器定制和开发插件
    (转)U3D不同平台载入XML文件的方法——IOS MAC Android
    Unity3D中的欧拉角的理解
    (转)在ios android设备上使用 Protobuf (使用dll方式)
    (转)[原创]在ios android设备上使用 Protobuf (使用源码方式)
    (转)欧拉角与万向节死锁
    (转) unity 在移动平台中,文件操作路径详解
    微信小程序四(设置底部导航)
  • 原文地址:https://www.cnblogs.com/1305536110-dym/p/14903596.html
Copyright © 2020-2023  润新知