itv留言板模块

来源:互联网 发布:软件定义存储产品 编辑:程序博客网 时间:2024/05/01 23:09

  策划在itv程序中加入留言板模块,老板掏不出来外包钱所以只有自己做了。在功能上具有主帖列表和跟帖列表界面,发主贴,发跟帖,刷新列表就这些功能,暂时没有好友等类似百度贴吧app的功能。(PS:我自己的代码写出来无所谓,特意删除实现的都是公司前辈的代码,我不会说也别问我!)


其中:1、实现逻辑是具有3个缓存,pTargetList是主动更新用的。pIndeedList是实际listadapter的数据。m_pFreshNewList也是主动更新用的。

     2、其中的listview控件是网上下载的。稍微改了下。后续将会专门写出自己的心得。


package com.itv.v.view;import java.util.List;import android.content.Intent;import android.os.Bundle;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.TextView;import com.itv.Define;import com.itv.c.entity.BlogTotalType;import com.itv.c.entity.IEntity;import com.itv.c.view.R;import com.itv.u.CodeUtil;import com.itv.u.ImageUtil;import com.itv.u.listview.DropDownListView;import com.itv.u.listview.GetDataTask.IGetDataTaskCallback;import com.itv.u.listview.IListAdpterCallBack;import com.itv.u.listview.ListAdpter;/** * 总的留言板分为3个:谈天说地,游戏心得,玩家反馈 *  * 虽然分为3个但是区别仅是信息不一样,所以用一个Activity来表示全部 *  * @author Administrator *  */public class BlogActivity extends BaseActivity {private String TAG = "BlogActivity";@Overrideprotected void onPause() {super.onPause();pAddTag = 0 ;}@Overrideprotected void onResume() {super.onResume();//这种情况是为了应对添加一个主题条目制作if( pAddTag == 1 ){sendRefreshDataRequest () ;}//这种情况是为了返回跟新回帖信息制作 if(m_pUpdateNumTag == 2){m_pUpdateNumTag = -1 ;BlogTotalType pBlog = (BlogTotalType) pIndeedList.get(m_pUpdateNumId) ;pBlog.m_nPostNum = pBlog.m_nPostNum +1 ;pListAdpter.updateItem(m_pUpdateNumId,pBlog) ;pListAdpter.notifyDataSetChanged() ;}}public static int pAddTag ;private int m_nBlogType;// 1 谈天。。,2游戏。。,3玩家反馈。public static List<IEntity> pTargetList;public List<IEntity> pIndeedList;public static List<IEntity> m_pFreshNewList ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);pTargetList = null;pIndeedList = null;m_pFreshNewList = null ;initLayoutForAnyScreen();}@Overridepublic void onBackPressed() {pTargetList = null;pIndeedList = null;m_pFreshNewList = null ;m_pUpdateNumTag = -1 ;m_pUpdateNumId = - 1;super.onBackPressed();}@Overridevoid initLayoutForAnyScreen() {setContentView(R.layout.blog_total);mInflater = LayoutInflater.from(this) ;Intent intent = getIntent();int tag = intent.getIntExtra(Define.TAG, -1); //这个仅仅是区别进入的是那个主题的留言板fixXY();m_nBlogType = tag;decroateTitle(tag);addListener();addTotalBlog();}private IViewListener pList = new MyViewListener();private void addTotalBlog() {MainActivity.pManager.getBloginfoByPostclass(0, m_nBlogType, pList); //0:请求数据集合的初始索引即从id为0开始的N条数据。}private void addListener() {OnClickListener pLi = new MyListener();CodeUtil.AddImageButtonListener(this, R.id.blog_total_backBtn, pLi);CodeUtil.addViewListener(this, R.id.blog_total_btn, pLi) ;}class MyViewListener implements IViewListener {@Overridepublic void OnError(int nErrCode) {switch(nErrCode){case 0:findViewById(R.id.blog_total_process) .setVisibility(View.GONE) ;CustomToast.showToast(BlogActivity.this,"请求主贴列表失败!", 1000) ;break ;case 1:findViewById(R.id.blog_total_process) .setVisibility(View.GONE) ;CustomToast.showToast(BlogActivity.this,"主帖获得完毕,但内容为空!", 1000) ;break ;case 3://网络获取出错CustomToast.showToast(BlogActivity.this,"请求失败请稍后再试!", 1000) ;break ;case 4://没有信息了CustomToast.showToast(BlogActivity.this,"已经没有更多信息了,请稍后再试!", 1000) ;pListView.setHasMore(false) ;m_bSendLimit = false ;CodeUtil.e(TAG, "却是没有值了") ;pListView.onBottomComplete();break ;case 5:CustomToast.showToast(BlogActivity.this,"网络问题无法获得最新主帖数据!", 1000) ;m_bFreshNewDataLimit = false ;pListView.onDropDownComplete() ;break ;case 6:CustomToast.showToast(BlogActivity.this,"当前已经是最新主帖数据!", 1000) ;m_bFreshNewDataLimit = false ;pListView.onDropDownComplete() ;break ;}}@Overridepublic void OnViewUpdate(int type) {if(pTargetList != null)CodeUtil.e(TAG, "onViewUpdate!" + pTargetList.size()+":"+type);if(pTargetList != null)CustomToast.showToast(BlogActivity.this, "已经成功获取留言板信息:"+ pTargetList.size() + "条", 1000);findViewById(R.id.blog_total_process) .setVisibility(View.GONE) ;switch(type) //type仅仅是区分回调的种类。{case 0:initList(); //初次获得可能只有10条break ;case 1:addList() ;//点击加载后可能多获得一些 (很久之前的数据)break ;case 2:freshNewData();//下拉列表后可能更新一些数据。(初次获取信息后之后后台收到的新的添加数据)break ;}}@Overridepublic void OnViewUpdate(Message msg) {}}class MyListener implements OnClickListener {@Overridepublic void onClick(View v) {int id = v.getId();switch (id) {case R.id.blog_total_backBtn:BlogActivity.this.onBackPressed();break;case R.id.blog_total_btn:jump2AddActivity() ;break ;}}}private void jump2AddActivity() {Intent intent = new Intent(this,AddPostActivity.class) ; //具体的添加Viewintent.putExtra(Define.TAG, m_nBlogType) ;startActivity(intent) ;}/** * @param tag *            :种类 */private void decroateTitle(int tag) {TextView textView = (TextView) findViewById(R.id.blog_total_title);String text = "";switch (tag) {case 1:text = "谈天说地";break;case 2:text = "游戏心得";break;case 3:text = "玩家反馈";break;}textView.setText(text.toString());}private LayoutInflater mInflater;private DropDownListView pListView;private ListAdpter pListAdpter;private void addList(){int count = pTargetList.size();CodeUtil.e(TAG, "tarsize:"+pTargetList.size()) ;if(count != 0){for (int i = 0; i < count; i++)pIndeedList.add(pTargetList.get(i));CodeUtil.e(TAG, "addList"+pIndeedList.size()+":"+pListAdpter.getCount()) ;pListAdpter.addListItems(pTargetList) ;CodeUtil.e(TAG, "addList2 "+pIndeedList.size()+":"+pListAdpter.getCount()) ;pListAdpter.notifyDataSetChanged() ;CodeUtil.e(TAG, "addList3 "+pIndeedList.size()+":"+pListAdpter.getCount()) ;}else {pListView.setHasMore(false) ;}pListView.onBottomComplete();m_bSendLimit = false ;}public void initList() {if (pListAdpter == null)pListAdpter = new ListAdpter(this);if (pIndeedList == null)pIndeedList = pTargetList;else {//已在addList中实现,如果出现运行这里将会报错。return;// 添加数据}// 初始化数据if (pListView == null) {CodeUtil.e(TAG, "init list"+pIndeedList.size()) ;pListView = (DropDownListView) findViewById(R.id.blog_total_list_view);pListAdpter.setList(pIndeedList) ;IListAdpterCallBack tempL = new ListAdapterListenerBlogImpl() ;pListAdpter.setExtraListener(tempL);}pListView.setDropDownStyle(true);pListView.setAutoLoadOnBottom(true);pListView.setOnDropDownListener(new DropDownListView.OnDropDownListener() {@Overridepublic void onDropDown() {//这里面执行sendRefreshDataRequest() ; //处理下拉回调,即更新之后得数据}});pListView.setOnBottomStyle(true);pListView.setOnBottomListener(null);final IGetDataTaskCallback callback = new BlogItemTaskCallback();pListView.setOnBottomListener(new OnClickListener() {@Overridepublic void onClick(View v) {new com.itv.u.listview.GetDataTask(false, callback).execute(); //即添加之前的数据}});pListView.SetExtraOnScrollStateListener(pListAdpter.mExtraListener);pListView.setAdapter(pListAdpter);}private void sendRefreshDataRequest(){if(pListAdpter == null || pListView == null || pIndeedList == null || pIndeedList.size() == 0){addTotalBlog() ;return ;}if(m_bFreshNewDataLimit){pListView.onDropDownComplete() ;return ;}m_bFreshNewDataLimit = true ;BlogTotalType bo = (BlogTotalType) pIndeedList.get(0) ; //获得索引MainActivity.pManager.sendRefreshDataRequest(bo.m_nMainID,m_nBlogType,pList) ;}private boolean m_bFreshNewDataLimit = false ;private void freshNewData(){ if(pListView != null && pIndeedList!=null && m_pFreshNewList!=null){int count = m_pFreshNewList.size() ;IEntity pEntity = null ;boolean pFlag = false ;for(int i = count- 1 ; i >= 0 ; i--){pFlag = true ;pEntity = m_pFreshNewList.get(i) ;pIndeedList.add(0, pEntity) ;pListAdpter.addItem(pEntity) ;}if(pFlag)pListAdpter.notifyDataSetChanged() ;}m_bFreshNewDataLimit = false ;pListView.onDropDownComplete() ;}private boolean m_bSendLimit = false;class BlogItemTaskCallback implements IGetDataTaskCallback{@Overridepublic String[] doInBackgroundCallback(Void... params) {return null;}@Overridepublic void onPostExecuteCallback(String[] result, boolean isDropDown) {//这里发送信息请求pTargetList = null ;if(pIndeedList == null || pIndeedList.size() == 0){CustomToast.showToast(BlogActivity.this,"请求额外留言板信息出错!", 1000) ;return ;}if(m_bSendLimit){CustomToast.showToast(BlogActivity.this, "发送消息过于频繁!", 1000) ;return ;}m_bSendLimit = true ;MainActivity.pManager.getBloginfoByPostclass(((BlogTotalType)pIndeedList.get(pIndeedList.size() -1)).m_nMainID, m_nBlogType, pList); }}class ListAdapterListenerBlogImpl implements IListAdpterCallBack{@Overridepublic View decorateViewOnGetView(List<IEntity> list, int position,View convertView, ViewGroup parent) { //getview的回调CodeUtil.e(TAG, pIndeedList.size()+"position:"+position+":::"+pListAdpter.getCount()) ;if(position >= pIndeedList.size() )return null ;BlogTotalType blog = (BlogTotalType) pIndeedList.get(position) ;if( null  == convertView){convertView = mInflater.inflate(R.layout.blog_item,null);}View v = convertView.findViewById(R.id.blog_item_title) ;ImageUtil.SetAutoScreenImageView(v, 0, 0, 10, 8, 0, 0) ;CodeUtil.setTextViewText(v, blog.m_sPostitle) ;v = convertView.findViewById(R.id.blog_item_count) ;ImageUtil.SetAutoScreenImageView(v, 0, 0, 10, 0, 5, 0) ;CodeUtil.setTextViewText(v, "贴数 : "+blog.m_nPostNum) ;v = convertView.findViewById(R.id.blog_item_time) ;ImageUtil.SetAutoScreenImageView(v, 0, 0, 0, 5, 5, 0) ;CodeUtil.setTextViewText(v, blog.m_sDate) ;v = convertView.findViewById(R.id.blog_item_nick) ;ImageUtil.SetAutoScreenImageView(v,0, 0, 0, 5, 5, 0) ;CodeUtil.setTextViewText(v, blog.m_sUsername) ;convertView.setTag(position) ;convertView.findViewById(R.id.blog_item_btn).setOnClickListener(pInnerListener) ;return convertView;}@Overridepublic void DecorateViewOnAddExtraList(List<IEntity> list) { //当有额外的数据添加时View convertView = null;CodeUtil.e(TAG, "DecorateViewOnAddExtraList") ;decorateViewOnGetView(list, list.size() - 1, convertView, null);}OnClickListener pInnerListener = new InnerClassListener() ;Intent pInnerIntent = new Intent(BlogActivity.this,BlogDetailActivity.class) ;class InnerClassListener implements View.OnClickListener{@Overridepublic void onClick(View v) {BlogTotalType b = (BlogTotalType) pIndeedList.get(Integer.parseInt(v.getTag().toString())) ;CodeUtil.e(TAG, "click obj == null :"+(b == null)) ;Bundle bx = new Bundle();bx.putSerializable(Define.TAG, b) ;pInnerIntent.putExtra(Define.TAG, bx) ;BlogActivity.this.startActivity(pInnerIntent) ;m_pUpdateNumId = Integer.parseInt(v.getTag().toString() );m_pUpdateNumTag = 0 ;}}}public static int m_pUpdateNumTag =-1;//0 发送状态 , -1 待机,2需改变public  int m_pUpdateNumId =-1;// 处理屏幕自适应private void fixXY() {
//...}}

0 0
原创粉丝点击