比方说,我的手机屏幕上的ListView一共可以显示15行,我如果选中第1行,那么第1行的背景颜色被改变,但第16行也被改变了,求解啊,我改变背景的代码如下:
private View oldLinearLayout;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> paramAdapterView,
View paramView, int paramInt, long paramLong) {
if (beforeLinearLayout != null) {
oldLinearLayout.setBackgroundDrawable(null);
}
paramView.setBackgroundColor(Color.GREEN);
oldLinearLayout= paramView;
}
});
private View oldLinearLayout;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> paramAdapterView,
View paramView, int paramInt, long paramLong) {
if (beforeLinearLayout != null) {
oldLinearLayout.setBackgroundDrawable(null);
}
paramView.setBackgroundColor(Color.GREEN);
oldLinearLayout= paramView;
}
});
解决方案 »
- 求助,android调用so库文件报错
- android编程,如何删除通讯录中的联系人
- ViewGroup中用LayoutInflater显示不出来!求解!谢谢。
- 老鸟们来看一下这个android:layout_weight是什么意思呢?
- 如何屏蔽掉menu键长按事件响应?
- 怎么实现 系统自带闹钟功能
- 图片位置
- 怎么安装google play service?
- android studio android monitor打不开问题
- 新手求助,写Java里面文件部分的代码遇到问题
- 安卓里面如何实现画板的蜡笔效果,类似于PS里面的笔刷效果又怎么实现~求指点试过了很多API都不行!最好能有代码
- 妹子是android新手,遇到数据传递问题,求少年们帮助
http://bbs.csdn.net/topics/390431893
//Adapter中
public void setSelected(int selected) {
this.selected = selected;
notifyDataSetChanged();
}
//OnItemClick时
adapter.setSelected(position);
我是这么写的:
SimpleAdapter listItemAdapter = new SimpleAdapter(this, listdata,R.layout.list_salesck,
new String[] { "billdate", "state","zhaiyao", "billname", "userfullname" },
new int[] {R.id.billdate, R.id.textView14, R.id.zhaiyao,R.id.billtype, R.id.userfullname });listView.setAdapter(listItemAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> paramAdapterView,
View paramView, int paramInt, long paramLong) {
if (oldLinearLayout != null) {
oldLinearLayout.setBackgroundDrawable(null);
}
// 把这次的背景颜色设置成员灰色
paramView.setBackgroundColor(Color.GRAY);
nowClick = paramInt;
oldLinearLayout = paramView;
}
});我应该怎么加啊,跪求具体的代码
private int selected ;
public void setSelected(int selected) {
this.selected = selected;
notifyDataSetChanged();
} //在getView 判断当前的position 是否是selected中的
if( position == selected){
// 按压背景
}else{
// 正常背景
}
//在Activity页面回调OnItemClickListener时
adapter.setSelected(position);
用ViewHolder来解决
比如:
getView……
{
ViewHolder holder;
if (null == convertView) {
convertView = LayoutInflater.from(RewardActivity.this).inflate(
R.layout.reward_cions_item, null);
convertView = inflater.inflate(R.layout.reward_cions_item, null);
holder = new ViewHolder();
holder.time = (TextView) convertView.findViewById(R.id.time);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.time.setText("11");
return convertView;
}
class ViewHolder
{
TextView time;
……
}
1. 使用ViewHolder模式 作用是避免重复初始化View ,当然更合适的做法是在ViewHolder内做是否当前选中的判断,做背景的更换,2. LZ 对Adapter适配器类不是很了解, 建议先去 先去了解下 BaseAdapter这个类, 上面的code中的adapter,是一个具体的 BaseAdapter的子类的实例类 , 你应该去实现这个Adapter实例类 ,作为数据源给布局提供数据我贴一段我的code 你可以参考一下解决这个问题
import java.util.List;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.ishow.funnymap.bean.Menu;
import com.ishow.funnymap.ui.R;public class MenuGridViewAdapter extends BaseAdapter { private Context context;
private List<Menu> menuGridViewList;
private int selected; public MenuGridViewAdapter(Context context, List<Menu> menuGridViewList) {
this.context = context;
this.menuGridViewList = menuGridViewList;
} // 设置当前的选择状态
public void setSelected(int selected) {
this.selected = selected;
notifyDataSetChanged();
} @Override
public int getCount() {
return menuGridViewList.size();
} @Override
public Object getItem(int position) {
return menuGridViewList.get(position);
} @Override
public long getItemId(int position) {
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null;
if (convertView == null) {
convertView = inflateView();
}
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.init(convertView);
viewHolder.fillFromItem(position, selected == position);
return convertView;
} private View inflateView() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.switch_pull_down_menu_item, null);
view.setTag(new ViewHolder());
return view;
} class ViewHolder {
ImageView imageView;
TextView textView; public void init(View view) {
imageView = (ImageView) view.findViewById(R.id.menu_ico);
textView = (TextView) view.findViewById(R.id.menu_description);
} public void fillFromItem(int position, boolean isCurrent) {
if (isCurrent) {
imageView.setBackgroundResource(menuGridViewList.get(position)
.getImageResNormal());
} else {
imageView.setBackgroundResource(menuGridViewList.get(position)
.getImageResPressed());
}
textView.setText(menuGridViewList.get(position).getTextName());
} }
}
OnItemClick EventmenuGridView.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
onMenuSelectedListener.onMenuSelected(menuGridViewAdapter
.getItem(position));
menuGridViewAdapter.setSelected(position);
// dismiss();
}
});