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>
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空间发表动态的更多相关文章
- android仿qq空间、微信朋友圈图片展示
废话不多说,先上效果图 由于近期须要做朋友圈功能,所以在此记录一下,事实上非常多人不明确的一点应该是在图片的排列上面吧,不规则的排列,事实上非常easy的.就是一个GridView.然而你xml光光写 ...
- 仿QQ空间动态界面分享
先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...
- mui开发app之多图压缩与上传(仿qq空间说说发表)
欲实现效果图 提出需求点: 用户可自由添加删除替换多张图片,并且显示相应缩略图,限制为8张 用户可选择压缩图或直接上传原图功能 返回提醒用户会丢失填写的信息 下面一个个实现上述需求,从简单到复杂: 需 ...
- 仿QQ空间和微信朋友圈,高解耦高复用高灵活
先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...
- Fragment,仿QQ空间
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451 在今天的这篇文章当中,我依然会以实战加理论结合 ...
- JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果
JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果 今天是2014年第一篇博客是关于类似于我们的qq空间长图片展示效果,因为一张很长的图片不可能全部把他展示出来,所以外层用了一个容器给他一个高度,超 ...
- Html - 仿QQ空间右下角工具浮动块
仿QQ空间右下角工具浮动块 <style type="text/css"> .cy-tp-area>.cy-tp-fixbtn>.cy-tp-text { ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单 github地址:https://gith ...
- Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)
Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...
随机推荐
- javaScript学习DOM模型
DOM 全称是 Document Object Model 文档对象模型大白话,就是把文档中的标签,属性,文本,转换成为对象来管理 ...
- 【Linux】LVM 逻辑卷管理
LVM - 逻辑卷管理 简介 LVM(Logical Volume Manager), 即逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制. 相关名词 PV(physical volume) ...
- 跟我一起写 Makefile(八)
六.多行变量 还有一种设置变量值的方法是使用define关键字.使用define关键字设置变量的值可以有换行,这有利于定义一系列的命令(前面我们讲过"命令包"的技术就是利用这个 ...
- Java 多线程与并发【原理第二部分笔记】
Java 多线程与并发[原理第二部分笔记] 什么是Java内存模型中的happens-before Java内存模型,即JMM,本身是一种抽象的概念,并不是真实存在的,他描述的是一组规则或者说是一种规 ...
- SpringBoot开发八-会话管理
需求介绍-会话管理 利用Cookie和Seesion使得HTTP变成有会话的连接,写几个实例演示一下 代码实现 先写个例子,表示客户端第一次访问服务器,服务器端创建一个Cookie发送给客户端. 不管 ...
- linux 磁盘IO速度测试
写入速度测试命令:time dd oflag=direct if=/dev/zero of=/data2/test bs=2k count=1000000 //if表示从哪里读取 of表示写入到哪里 ...
- Set重写hashCode和equals方法实现引用对象去重
运作原理: 首先判断hashCode是否相同,如果不同,直接判定为两个不同的对象.如果hashCode相同,再去比较equals是否一样,如果一样,则为同一个对象.如果不一样,则是两个不同对象. 那么 ...
- docker安装完权限问题
在用户权限下docker 命令需要 sudo 否则出现以下问题 通过将用户添加到docker用户组可以将sudo去掉,命令如下 sudo groupadd docker #添加docker用户组 su ...
- BZOJ 4826 影魔
本题可以采用主席树的在线做法,只不过常数会 \(super\) 大. 和其他题解差不多,我们先要求出第 \(i\) 个数的 \(l_i\) 和 \(r_i\) ,其中 \(l_i\) 表示左边第一个比 ...
- 08.SpringMVC之方法返回值
返回ModelAndView Controller类方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view.之前我就已讲过,在此并不过多赘述. 返回void 在Cont ...