android 微信评论功能,Android 仿微信点赞和评论弹出框

Page指令是用来定义整个Jsp页面的属性和这些属性的值格式: page中的主要指令标记有以下几种: language:设置Jsp页面中用到的语言,默认值为Java extends:设置

点击评论,弹出输入框,添加评论并在页面中实时显示;

8bdf33efe51b404335f3eabdbcee412a.png

微信朋友圈点赞和评论功能

2. 实际效果

本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现弹出窗,并能发评论,忽略具体布局细节。具体效果如下:

60d8972faf477806c564c49b595c1ce5.gif

丑爆了,我知道了,⊙﹏⊙||

3. 知识点清单

4. 美工素材

由于 .apk 本质上是个压缩包,我们可以通过解压得到该 .apk 文件的图片素材和布局文件,更多获得素材的方法参见我的另一篇博文 如何获得Android素材图片。通过这种方式得到颜色、更多按钮的样式等素材,仅供学习之用,请勿做侵犯版权之事。尊重知识版权既是大势所趋,也是终将使每个开发者受益的事。

71f0562c3c837fd575354d0446362c2e.png

文件夹r里存放图片

f7ac1f3611c2d44e139e533183078550.png

找到更多按钮

5. 关键代码

开发环境:Android Studio 1.4.1 for Mac + ADT 21 + JDK 1.8.0。

MainAcitivity.java

package main.zhaizu.com.popupwindowdemo;

import android.content.Context;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.TextUtils;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.EditText;

import android.widget.ListView;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import main.zhaizu.com.popupwindowdemo.model.Comment;

import main.zhaizu.com.popupwindowdemo.model.Item;

import main.zhaizu.com.popupwindowdemo.ui.ItemView;

public class MainActivity extends AppCompatActivity {

private ListView mListView;

private View mCommentView;

private MyAdapter myAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView = (ListView) findViewById(R.id.listview);

myAdapter = new MyAdapter(this, getData());

mListView.setAdapter(myAdapter);

mCommentView = findViewById(R.id.comment_view);

}

// build data

private ArrayList getData() {

int ITEM_COUNT = 20;

ArrayList data = new ArrayList<>();

data.add(new Item(R.drawable.xiaona, "薄荷栗", "我学过跆拳道,都给我跪下唱征服", "昨天"));

data.add(new Item(R.drawable.xueyan, "欣然", "走遍天涯海角,唯有我家风景最好,啊哈哈", "昨天"));

data.add(new Item(R.drawable.leishao, "陈磊_CL", "老子以后要当行长的,都来找我借钱吧,now", "昨天"));

data.add(new Item(R.drawable.yuhong, "永恒依然", "房子车子都到碗里来", "昨天"));

data.add(new Item(R.drawable.lanshan, "蓝珊", "你们这群傻×,我笑而不语", "昨天"));

return data;

}

// custom adapter

private class MyAdapter extends BaseAdapter implements ItemView.OnCommentListener {

private Context context;

private ArrayList mData;

private Map mCachedViews = new HashMap<>();

public MyAdapter(Context context, ArrayList mData) {

this.context = context;

this.mData = mData;

}

@Override

public int getCount() {

return mData.size();

}

@Override

public Object getItem(int position) {

return mData.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view;

if (convertView != null) {

view = convertView;

} else {

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view = inflater.inflate(R.layout.listview_item, null, false);

}

if (view instanceof ItemView) {

Item data = (Item) getItem(position);

((ItemView) view).setData(data);

((ItemView) view).setPosition(position);

((ItemView) view).setCommentListener(this);

cacheView(position, (ItemView) view);

}

return view;

}

@Override

public void onComment(int position) {

showCommentView(position);

}

private void cacheView(int position, ItemView view) {

Iterator> entries = mCachedViews.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry entry = entries.next();

if (entry.getValue() == view && entry.getKey() != position) {

mCachedViews.remove(entry.getKey());

break;

}

}

mCachedViews.put(position, view);

}

private void showCommentView(final int position) {

mCommentView.setVisibility(View.VISIBLE);

mCommentView.findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

EditText et = (EditText) mCommentView.findViewById(R.id.edit);

String s = et.getText().toString();

if (!TextUtils.isEmpty(s)) {

// update model

Comment comment = new Comment(s);

mData.get(position).getComments().add(comment);

// update view maybe

ItemView itemView = mCachedViews.get(position);

if (itemView != null && position == itemView.getPosition()) {

itemView.addComment();

}

et.setText("");

mCommentView.setVisibility(View.GONE);

}

}

});

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值