效果展示图:
功能描述:用户点击+会进入发表动态的界面,发表成功后跳转到个人首页。
后续完善:增加个人头像的上传,对界面进行优化,增加点赞和评论的功能。
主要采用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>
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>
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>