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 ...
随机推荐
- SpringBoot | 3.3 整合MyBatis-Plus
目录 前言 1. 什么是MyBatis-Plus 1.1 BaseMapper接口 1.2 IService接口 2. 整合MyBatis-Plus以及CRUD功能 2.1 导入场景依赖 2.2 CR ...
- Spring Boot 配置中的敏感信息如何保护?
在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...
- STM32启动代码分析及其汇编学习-ARM
STM32 启动代码 Author By YuCloud 边看启动文件边学汇编 汇编 see ARM: Assembler User Guide see: https://blog.csdn.net/ ...
- 【笔记】集成学习入门之soft voting classifier和hard voting classifier
集成学习入门之soft voting classifier和hard voting classifier 集成学习 通过构建并结合多个学习器来完成学习任务,一般是先产生一组"个体学习器&qu ...
- 使用TestNG,Apahcje POI和Excel文件进测试行数据驱动测试
import com.cxy_fanwe.common.test_fanwe_qiantai;import org.apache.http.Header;import org.apache.http. ...
- 【Java笔记】以并发修改异常为例总结的出错解决办法
先来看出错代码: /*需求: 遍历已有集合 如果在集合中发现存在字符串元素"world" 则在"world"后添加元素"javaee" */ ...
- 大数的快速幂模 Python实现
要求 实现模幂算法,通过服务器的检验. 访问http://2**.207.12.156:9012/step_04服务器会给你10个问题,每个问题包含三个数(a,b,c),请给出a^b%c的值.返回值写 ...
- Asp.Net Core Razor页面中使用echarts展示图形
Asp.Net Core Razor页面中使用echarts展示图形 要在Razor页面中使用echarts显示图形,主要问题点在于如何将数据传递给js文件. 1,下载安装echarts库文件 首先引 ...
- NOIP 模拟 $11\;\rm math$
题解 签到题(然而还是不会) 考虑所有可能的值一定是 \(\in [0,k)\),且一定为 \(gcd(a_1,a_2,...a_n,k)\) 的倍数. 证明: 设 \(tmp=b_1a_1+b_2a ...
- mysql 局域网连接
下面分别简述操作: 配置虚拟机网络 默认方式是NAT,但为了让宿主机之外的其它计算机也能访问虚拟机,NAT方式配置起来有些复杂,这里推荐用桥接模式,关于VM的几种网络方式的区别,可以参考这篇文章配置好 ...