效果展示图:

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

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

主要采用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. 【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 引言 不知道有多少人是和我一样分不 ...

  2. SpringBoot | 3.3 整合MyBatis-Plus

    目录 前言 1. 什么是MyBatis-Plus 1.1 BaseMapper接口 1.2 IService接口 2. 整合MyBatis-Plus以及CRUD功能 2.1 导入场景依赖 2.2 CR ...

  3. Java8新特性(三)之方法引用和构造器引用

    1.使用场景 当要传递给Lambda体的操作,已经存在实现的方法了,就可以使用方法引用.(抽象方法的参数列表  必须与方法引用方法的参数列表保持一致) 2. 语法 使用操作符[::]将方法名和对象或类 ...

  4. 跟我一起写 Makefile(十二)

    隐含规则 ---- 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj ...

  5. docker-03

    Docker构建私有registry(仓库) #1 启动registry [root@docker ~]# docker run -d -p 5000:5000 --restart=always -- ...

  6. 微信小程序全局数据globalData的使用问题

    如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...

  7. Window如何查看cpu核数,更改CPU开启的核数?

    转载地址:http://www.win7zhijia.cn/win10jc/win10_8627.html

  8. AspNetCore WebApi

    需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...

  9. Json 文件 : 出现 Expected value at 1:0 问题的解决

    只要找一个json在线解析,验证你的json文件格式的正确性,错误可以忽略. 如要消除红叉,关闭Json Validation即可,如下操作:

  10. 【maven】入门教程

    一:Maven简介 1.Maven是什么? 是一个跨平台的项目管理工具.使用java语言开发(Maven 3.3+ require JDK 1.7 or above to execute)2. 为什么 ...