关于List每一项改变状态出现混乱的解决办法

       由于在listview当中,当项目超过一个屏幕的大小时会滑出第二屏,这时第二屏会重新利用前一屏的视图,如果前一屏中list的某一项状态发生改变的话会影响后面所有的项,从而出现视图混乱的情况,那么如何来解决这一问题呢?核心就是用记住这个list中所有项的状态,根据这个状态来刷新视图。举个简单例子:

由于布局很简单,我这里只做简单描述。每一项list含一个TextView和一个Button,现在要根据TextView中text的值来改变button的状态。

直接上代码

package com.example.testlistview;

import junit.framework.Test;
import android.R.integer;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	int[] test = { 1, 2, 3, 2, 2, 2, 2, 3, 3, 2, 1, 2, 3, 1, 2, 3, 1, 2, 1, 2,
			3 ,2,3,1,3,2,1,3,1,1,1,3,3,3,1,2,3,1,1,1,1,1,3,3,3,2,2,3,1,2};//1,2,3分别代表button的三种状态
	ListView mListView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mListView=(ListView)findViewById(R.id.mylist);
		MyAdapter mMyAdapter=new MyAdapter();
		
		mListView.setAdapter(mMyAdapter);
	}

	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return test.length;
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return test[arg0];
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup arg2) {
			// TODO Auto-generated method stub
			ViewHolder holder;
			if (convertView == null) {
				convertView = LayoutInflater.from(MainActivity.this).inflate(
						R.layout.item_layout, null);
				holder = new ViewHolder();
				holder.textView = (TextView) convertView
						.findViewById(R.id.mytext);
				holder.button = (Button) convertView
						.findViewById(R.id.mybutton);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();

			}
			holder.textView.setText(test[position]+"     ");
			holder.button.setBackgroundResource(setBeijing(test[position]));//test[position]记录了当前位置button的状态
			
			return convertView;
		}

	}
	public int setBeijing(int code){//根据code来改变背景
		int result = 0;
		switch (code) {
		case 1:
			result=R.drawable.ic_launcher;
			break;
		case 2:
			result=R.drawable.bt_login;
		case 3:
			break;
		default:
			break;
		}
		
		return result;
	}

	class ViewHolder {
		TextView textView;
		Button button;
	}
}


  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值