itv留言板模块

  策划在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";
	
	@Override
	protected void onPause() {
		super.onPause();
		pAddTag = 0 ;
	}

	@Override
	protected 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 ;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		pTargetList = null;
		pIndeedList = null;
		m_pFreshNewList = null ;
		initLayoutForAnyScreen();
	}

	@Override
	public void onBackPressed() {
		pTargetList = null;
		pIndeedList = null;
		m_pFreshNewList = null ;
		m_pUpdateNumTag = -1 ;
		m_pUpdateNumId = - 1;
		super.onBackPressed();
	}

	@Override
	void 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 {

		@Override
		public 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 ;
			}
		}

		@Override
		public 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 ;
			}
		}

		@Override
		public void OnViewUpdate(Message msg) {

		}
	}

	class MyListener implements OnClickListener {
		@Override
		public 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) ; //具体的添加View
		intent.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() {
			
			@Override
			public void onDropDown() {
				//这里面执行
				sendRefreshDataRequest() ; //处理下拉回调,即更新之后得数据
			}
		});
		
		pListView.setOnBottomStyle(true);
		pListView.setOnBottomListener(null);
		final IGetDataTaskCallback callback = new BlogItemTaskCallback();
		pListView.setOnBottomListener(new OnClickListener() {
			@Override
			public 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
	{

		@Override
		public String[] doInBackgroundCallback(Void... params) {
			
			return null;
		}

		@Override
		public 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
	{

		@Override
		public 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;
		}

		@Override
		public 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
		{

			@Override
			public 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() {
//...
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值