效果展示图:

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

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

主要采用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>

Android仿QQ空间发表动态的更多相关文章

  1. android仿qq空间、微信朋友圈图片展示

    废话不多说,先上效果图 由于近期须要做朋友圈功能,所以在此记录一下,事实上非常多人不明确的一点应该是在图片的排列上面吧,不规则的排列,事实上非常easy的.就是一个GridView.然而你xml光光写 ...

  2. 仿QQ空间动态界面分享

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  3. mui开发app之多图压缩与上传(仿qq空间说说发表)

    欲实现效果图 提出需求点: 用户可自由添加删除替换多张图片,并且显示相应缩略图,限制为8张 用户可选择压缩图或直接上传原图功能 返回提醒用户会丢失填写的信息 下面一个个实现上述需求,从简单到复杂: 需 ...

  4. 仿QQ空间和微信朋友圈,高解耦高复用高灵活

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  5. Fragment,仿QQ空间

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451          在今天的这篇文章当中,我依然会以实战加理论结合 ...

  6. JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果

    JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果 今天是2014年第一篇博客是关于类似于我们的qq空间长图片展示效果,因为一张很长的图片不可能全部把他展示出来,所以外层用了一个容器给他一个高度,超 ...

  7. Html - 仿QQ空间右下角工具浮动块

    仿QQ空间右下角工具浮动块 <style type="text/css"> .cy-tp-area>.cy-tp-fixbtn>.cy-tp-text { ...

  8. Android仿QQ ios dialog,仿QQ退出向上菜单

    Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单              github地址:https://gith ...

  9. Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)

    Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...

随机推荐

  1. MobSF移动安全扫描平台环境搭建与试用

    MobSF简介 MobSF(Mobile-Security-Framework)是一种开源自动化的移动应用程序(Android / iOS / Windows)安全测试框架,能够执行静态,动态和恶意软 ...

  2. 使用账号密码来操作github? NO!

    目录 简介 背景介绍 创建令牌 使用令牌 缓存令牌 使用GCM 总结 简介 最近在更新github文件的时候,突然说不让更新了,让我很是困惑,原因是在2021年8月13号之后,github已经不让直接 ...

  3. 【笔记】CART与决策树中的超参数

    CART与决策树中的超参数 先前的决策树其实应该称为CART CART的英文是Classification and regression tree,全称为分类与回归树,其是在给定输入随机变量X条件下输 ...

  4. minio设置永久访问链接

    1.通过minio分享的链接只能支持7天. 解决方案是设置对应的bucket 可通过路径直接访问.(必须通过minio client才能设置下载策略) wget https://dl.min.io/c ...

  5. CF上部分树形DP练习题

    本次 5 道题均来自Codeforce 关于树形DP的算法讲解:Here 791D. Bear and Tree Jumps 如果小熊每次能跳跃的距离为1,那么问题变为求树上任意两点之间距离之和. 对 ...

  6. msfvenom简介

    写此文是因为网上资料杂乱,不方便查阅,辣眼睛 测试免杀的时候刚好用到这个功能,顺便写一下(0202年靠msfvenom生成的纯原生payload可以宣告死亡了,如果有查不出来的杀软可以退群了,这也叫杀 ...

  7. 简单实现Linux服务器重启后自动启动Tomcat以及MongoDB

    1.场景描述 做一个网站差不多都会用到tomcat,用阿里云镜像市场提供的镜像里的tomcat是方便的,但是自己喜欢折腾,所以就自己在服务器里装了一个tomcat 但是有一次服务器被关了,然后自己要到 ...

  8. 题解 P4449 于神之怒加强版

    这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...

  9. 题解 math

    传送门 赛时用一个奇怪的方法过掉了 首先\(b_i\)的有效范围是\([0, k-1]\) 发现不同的\(a_i*b_i\)会有很多重的 考虑把\(a_i\%k\),然后由小到大排序 按顺序扫,如果某 ...

  10. git flow版本

    feature 分支:开发者进行功能开发的分支. develop 分支:对开发的功能进行集成的分支. release 分支:负责版本发布的分支. hotfix 分支:对线上缺陷进行修复工作的分支,热修 ...