ListView item Button 点击背景切换有关问题
ListView item Button 点击背景切换问题
ListView item中有个button按钮 点击按钮进行异步连网 然后改变button的背景 求指导怎么实现 类似于新浪微博的关注和已关注
比如我点击后关注 然后把按钮文字设置为已关注 并且改变背景 使其变为不可点击状态
这是adapter类
public class TypeAdapter extends BaseAdapter {
private ArrayList<NewsType> list;
private Context context;
private ViewHolder holder;
private appContext app;
public TypeAdapter(ArrayList<NewsType> list, Context context) {
this.list = list;
this.context = context;
app=(appContext) context.getApplicationContext();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.news_type_item, null);
holder = new ViewHolder();
holder.ivPic = (ImageView) convertView
.findViewById(R.id.type_img_pic);
holder.typeName = (TextView) convertView
.findViewById(R.id.type_item_type_name);
holder.typeDiscription = (TextView) convertView
.findViewById(R.id.type_item_type_dis);
holder.btAttend = (Button) convertView
.findViewById(R.id.type_item_bt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NewsType type = list.get(position);
if (type != null) {
holder.typeName.setText(type.getName());
holder.typeDiscription.setText(type.getDiscription());
holder.btAttend.setOnClickListener(new BtnClicklistener(position));
}
return convertView;
}
class BtnClicklistener implements OnClickListener{
private int position;
public BtnClicklistener(int pos) {
this.position = pos;
}
@Override
public void onClick(View v) {
new Thread() {
public void run() {
WebServiceUtil.AddUserAttentionType(list.get(position).getId(), app.getUserId());
}
}.start();
}
}
class ViewHolder {
ImageView ivPic;
TextView typeName;
TextView typeDiscription;
Button btAttend;
}
}
------解决方案--------------------
异步线程不能更新UI,只能说不能直接更新,你可以在异步线程里用handle来更新,或者你的这个button效果完全可以用一个button的动态style来设置啊
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/b_true"
android:state_pressed="true"
/>
<item
android:drawable="@drawable/b_false"
android:state_pressed="false"
/>
</selector>
------解决方案--------------------
在主线程中更新啊,谁让你在子线程中更新ui?
ListView item中有个button按钮 点击按钮进行异步连网 然后改变button的背景 求指导怎么实现 类似于新浪微博的关注和已关注
比如我点击后关注 然后把按钮文字设置为已关注 并且改变背景 使其变为不可点击状态
这是adapter类
public class TypeAdapter extends BaseAdapter {
private ArrayList<NewsType> list;
private Context context;
private ViewHolder holder;
private appContext app;
public TypeAdapter(ArrayList<NewsType> list, Context context) {
this.list = list;
this.context = context;
app=(appContext) context.getApplicationContext();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.news_type_item, null);
holder = new ViewHolder();
holder.ivPic = (ImageView) convertView
.findViewById(R.id.type_img_pic);
holder.typeName = (TextView) convertView
.findViewById(R.id.type_item_type_name);
holder.typeDiscription = (TextView) convertView
.findViewById(R.id.type_item_type_dis);
holder.btAttend = (Button) convertView
.findViewById(R.id.type_item_bt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NewsType type = list.get(position);
if (type != null) {
holder.typeName.setText(type.getName());
holder.typeDiscription.setText(type.getDiscription());
holder.btAttend.setOnClickListener(new BtnClicklistener(position));
}
return convertView;
}
class BtnClicklistener implements OnClickListener{
private int position;
public BtnClicklistener(int pos) {
this.position = pos;
}
@Override
public void onClick(View v) {
new Thread() {
public void run() {
WebServiceUtil.AddUserAttentionType(list.get(position).getId(), app.getUserId());
}
}.start();
}
}
class ViewHolder {
ImageView ivPic;
TextView typeName;
TextView typeDiscription;
Button btAttend;
}
}
------解决方案--------------------
异步线程不能更新UI,只能说不能直接更新,你可以在异步线程里用handle来更新,或者你的这个button效果完全可以用一个button的动态style来设置啊
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/b_true"
android:state_pressed="true"
/>
<item
android:drawable="@drawable/b_false"
android:state_pressed="false"
/>
</selector>
------解决方案--------------------
在主线程中更新啊,谁让你在子线程中更新ui?