https://www.cnblogs.com/three3/p/12763763.html
今天学习了Android的四大组件广播和监听部分,遇到困难有些定义不明白,明天帮助优化界面。
缩写代码:
package com.androidlearing.tdtreehole.activity; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.androidlearing.tdtreehole.R; import com.androidlearing.tdtreehole.adapter.PostAndRepostAdapter; import com.androidlearing.tdtreehole.bean.ItemBean; import com.androidlearing.tdtreehole.bean.ItemBeanRepost; import com.androidlearing.tdtreehole.httputils.HttpUtils; import com.androidlearing.tdtreehole.pojo.Data; import com.androidlearing.tdtreehole.pojo.Post; import com.androidlearing.tdtreehole.pojo.PostAndRepost; import com.androidlearing.tdtreehole.pojo.Repost; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.jcodecraeer.xrecyclerview.CustomFooterViewCallBack; import com.jcodecraeer.xrecyclerview.ProgressStyle; import com.jcodecraeer.xrecyclerview.XRecyclerView; import org.jetbrains.annotations.NotNull; import org.w3c.dom.Text; import java.io.IOException; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class RepostActivity extends AppCompatActivity { private static final String TAG = "RepostActivity"; private static final int GET_REPORTS = 0; private static final int IS_INSERTED = 1; private Post mPostForSelf; private XRecyclerView mRecyclerView; private Handler mHandler; private List<ItemBeanRepost> mItemBeanReposts; private List<PostAndRepost> mPostAndReposts = new ArrayList<>(); private PostAndRepostAdapter mAdapter; private EditText mRepostContent; private Button mAnswerBtn; private View mView; private String mContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_repost); //取得传来的数据 Intent intent = getIntent(); mPostForSelf = intent.getParcelableExtra("postKey"); //加载控件 initView(); //取得数据 getReposts(); //处理数据,更新UI handleMsg(); //设置刷新事件 handleRefresh(); } //插入数据 private void insertRepost(final Repost repost) { new Thread(new Runnable() { @Override public void run() { Log.d(TAG, "进入到插入方法了..."); HttpUtils httpUtils = new HttpUtils(); Call call = httpUtils.getCalls("http://39.97.109.245/TDTreeHole/repost?postid=" + repost.getPostid() + "&&content=" + repost.getContent() + "&&publishtime=" + repost.getPublishtime() + "&&userid=" + repost.getUserid()); call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { //请求失败的回调方法 Log.d(TAG, "onFailure and Exception is -->" + e); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { //请求成功的回调方法 Log.d(TAG, "onResponse..."); Gson gson = new Gson(); Type type = new TypeToken<String>() {}.getType(); String result = gson.fromJson(response.body().string(), type); Log.d(TAG,"result =="+result); Message message = new Message(); message.what = IS_INSERTED; message.obj = result; mHandler.sendMessage(message); } }); } }).start(); } //处理刷新事件 private void handleRefresh() { mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { //复写上拉刷新 getReposts(); new Handler().postDelayed(new Runnable() { @Override public void run() { mRecyclerView.refreshComplete(); } }, 1500); } @Override public void onLoadMore() { //复写下拉默认下拉方法。 //这里使用了footview,不再需要在这里复写. } }); } //设置数据并更新UI private void setData() { //在设置数据前,如果有数据则先清空.防止加载重复数据 if (mPostAndReposts != null) { mPostAndReposts.removeAll(mPostAndReposts); } PostAndRepost postAndRepost = new PostAndRepost(); postAndRepost.setType(PostAndRepostAdapter.TYPE_POST_CONTENT); ItemBean itemBean = new ItemBean(); itemBean.setUsername(mPostForSelf.getTitle()); itemBean.setPosttime(mPostForSelf.getPosttime()); itemBean.setContent(mPostForSelf.getPostcontent()); itemBean.setTitle(mPostForSelf.getTitle()); postAndRepost.setPost(itemBean); mPostAndReposts.add(postAndRepost); for (ItemBeanRepost item : mItemBeanReposts) { ItemBeanRepost items = new ItemBeanRepost(); items.setName(item.getName()); items.setContent(item.getContent()); items.setPosttime(item.getPosttime()); PostAndRepost postsAndReposts = new PostAndRepost(); postsAndReposts.setType(PostAndRepostAdapter.TYPE_REPOST_CONTENT); postsAndReposts.setReposts(items); mPostAndReposts.add(postsAndReposts); } //数据设置完去更新UI showReposts(); //设置UI的样式 setRepostsStyle(); } //设置UI样式 private void setRepostsStyle() { //找到footerView View footview = LayoutInflater.from(this).inflate(R.layout.repost_footer, mRecyclerView, false); //设置是否允许下拉刷新 mRecyclerView.setPullRefreshEnabled(true); //设置是否允许上拉加载 mRecyclerView.setLoadingMoreEnabled(true); //设置样式 mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallPulseRise); mView = LayoutInflater.from(RepostActivity.this).inflate(R.layout.repost_footer,mRecyclerView,false); mAnswerBtn = mView.findViewById(R.id.answer_btn); mRepostContent = mView.findViewById(R.id.repost_content_tv); //设置footer mRecyclerView.setFootView(footview, new CustomFooterViewCallBack() { @Override public void onLoadingMore(View yourFooterView) { } @Override public void onLoadMoreComplete(View yourFooterView) { } @Override public void onSetNoMore(View yourFooterView, boolean noMore) { } }); Log.d(TAG,"mView =="+mRecyclerView.getFootView()); } //更新UI private void showReposts() { Log.d(TAG, "showReposts..."); //设置布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(this); //设置水平还是竖直 layoutManager.setOrientation(LinearLayoutManager.VERTICAL); //设置标准还是逆向 layoutManager.setReverseLayout(false); //布局管理器放入RecyclerView mRecyclerView.setLayoutManager(layoutManager); //创建适配器 mAdapter = new PostAndRepostAdapter(mPostAndReposts); //设置前判断是否有Adapter,若不为空则移除所有数据再添加 if (mRecyclerView.getAdapter() != null) { mRecyclerView.removeAllViews(); } //设置进去 mRecyclerView.setAdapter(mAdapter); } //取得对应的数据并处理 private void handleMsg() { mHandler = new Handler(new Handler.Callback() { boolean isHandled = false; @Override public boolean handleMessage(@NonNull Message msg) { switch (msg.what) { case GET_REPORTS: List<Repost> repostList = (List<Repost>) msg.obj; List<ItemBeanRepost> itemBeanReposts = new ArrayList<>(); for (Repost repost : repostList) { ItemBeanRepost itemBeanRepost = new ItemBeanRepost(); itemBeanRepost.setName("" + repost.getUserid()); itemBeanRepost.setPosttime(repost.getPublishtime()); itemBeanRepost.setContent(repost.getContent()); itemBeanReposts.add(itemBeanRepost); } mItemBeanReposts = itemBeanReposts; //给适配器设置数据 setData(); isHandled = true; break; case IS_INSERTED: int result = Integer.parseInt((String)msg.obj) ; //大于0代表插入成功,更新列表 if (result > 0) { getReposts(); mRecyclerView.refreshComplete(); } break; } return isHandled; } }); } //获取回复数据 private void getReposts() { new Thread(new Runnable() { @Override public void run() { HttpUtils httpUtils = new HttpUtils(); Call call = httpUtils.getCalls("http://39.97.109.245/TDTreeHole/getRepost?postid= " + mPostForSelf.getPostid()); Log.d(TAG, "postId ==" + mPostForSelf.getPostid()); call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { //失败后的回调方法 Log.d(TAG, "onFailure and Exception is -->" + e); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { //成功后的回调方法 Log.d(TAG, "onResponse..."); Gson gson = new Gson(); Type type = new TypeToken<List<Repost>>() { }.getType(); List<Repost> reposts = gson.fromJson(response.body().string(), type); //Log.d(TAG,"reposts[0] content =="+reposts.get(0).getContent()); Message message = new Message(); message.what = GET_REPORTS; message.obj = reposts; mHandler.sendMessage(message); } }); } }).start(); } //加载控件 private void initView() { mRecyclerView = this.findViewById(R.id.recycler_view_for_repost); } public void TestRepost(View view){ Log.d(TAG,"onClick..."); mContent = mRepostContent.getText().toString(); int postid = mPostForSelf.getPostid(); Log.d(TAG,"content =="+mContent); //设置日期格式 DateFormat dateFormat = DateFormat.getDateInstance(2); //获取当前时间 String publishtime =dateFormat.format(new Date()); //简单的判空处理 if (TextUtils.isEmpty(mContent)) { Toast.makeText(RepostActivity.this,"请输入回复内容!",Toast.LENGTH_SHORT).show(); return; } final Repost repost = new Repost(); repost.setPostid(postid); repost.setContent(mContent); repost.setPublishtime(publishtime); //暂时使用测试数据,等登录注册模块做好后Intent传值过来 repost.setUserid(1); //去插入数据 insertRepost(repost); } }