Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 动态更改自定义列表项背景_Android - Fatal编程技术网

Android 动态更改自定义列表项背景

Android 动态更改自定义列表项背景,android,Android,我正在创建一个带有收藏夹功能的自定义列表视图,但我不知道如何在单击时更改收藏夹图像背景。当我简单地更改收藏夹图标的背景时,它会在滚动时自动更改另一个收藏夹图像背景的背景。请检查以下代码: public class CustomArrayAdapter extends BaseAdapter { private Activity activity; private LayoutInflater inflater = null; ArrayList<Customlist

我正在创建一个带有收藏夹功能的自定义列表视图,但我不知道如何在单击时更改收藏夹图像背景。当我简单地更改收藏夹图标的背景时,它会在滚动时自动更改另一个收藏夹图像背景的背景。请检查以下代码:

public class CustomArrayAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater = null;
    ArrayList<Customlist> list;
    DecimalFormat formatter = new DecimalFormat("#,##,###");

public CustomArrayAdapter(Activity a, ArrayList<Customlist> list) {
    activity = a;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.list = list;

}

public int getCount() {
    return list.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView,
        final ViewGroup parent) {

    TextView txt_unit, txt_state, txt_price, term_left, customr;
    TextView install_date;
    final ImageView fav;
    View view = convertView;

    if (convertView == null)
        view = inflater.inflate(R.layout.list_item, null);

    customr = (TextView) view.findViewById(R.id.customr);
    txt_state = (TextView) view.findViewById(R.id.txt_state);
    install_date = (TextView) view.findViewById(R.id.install_date);
    term_left = (TextView) view.findViewById(R.id.term_left);
    txt_price = (TextView) view.findViewById(R.id.txt_price);
    fav = (ImageView) view.findViewById(R.id.fav);
    txt_unit = (TextView) view.findViewById(R.id.txt_unit);

    fav.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            // fav = (ImageView)v.findViewById(R)

            fav.setBackgroundResource(R.drawable.favourite_select);

            Toast.makeText(activity, "click", 1).show();

        }
    });

    // set values
    customr.setText(list.get(position).getCUSTOMER());
    txt_state.setText(list.get(position).getSTATE_NAME());
    install_date.setText(list.get(position).getINSTALL_DATE());
    term_left.setText(list.get(position).getTREM_LEFT());
    String price = formatter.format(Integer.parseInt(list.get(position)
            .getRUPEES()));



    return view;
}
}
公共类CustomArrayAdapter扩展BaseAdapter{
私人活动;
专用充气机=空;
数组列表;
DecimalFormat formatter=新的DecimalFormat(“#,#,#,#,#,##”);
公共CustomArrayAdapter(活动a,ArrayList列表){
活动=a;
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
this.list=列表;
}
public int getCount(){
返回list.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整型位置,视图转换视图,
最终视图组(父视图){
text查看文本单位、文本状态、文本价格、术语左、客户;
TextView安装日期;
最终图像视图fav;
视图=转换视图;
if(convertView==null)
视图=充气机。充气(R.layout.list_项,空);
customr=(TextView)view.findViewById(R.id.customr);
txt_state=(TextView)view.findViewById(R.id.txt_state);
install\u date=(TextView)view.findViewById(R.id.install\u date);
term_left=(TextView)view.findViewById(R.id.term_left);
txt\u price=(TextView)view.findViewById(R.id.txt\u price);
fav=(ImageView)view.findViewById(R.id.fav);
txt\u单位=(TextView)view.findViewById(R.id.txt\u单位);
fav.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//fav=(图像视图)v.findviewbyd(R)
fav.setBackgroundResource(R.drawable.Favorite_select);
Toast.makeText(活动“单击”,1.show();
}
});
//设定值
customr.setText(list.get(position.getCUSTOMER());
txt_state.setText(list.get(position.getSTATE_NAME());
install_date.setText(list.get(position.getINSTALL_date());
term_left.setText(list.get(position.getTREM_left());
String price=formatter.format(Integer.parseInt(list.get)(position)
.getrupes());
返回视图;
}
}

您需要在ViewHolder模式上实现适配器:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHoldler holder = null;
    if (convertView == null) {
        convertView = LayoutInflater.from(ctx).inflate(
                R.layout.frag_home_gridview_item, null, false);
        holder = new ViewHoldler();
        holder.iv = (ImageView) convertView
                .findViewById(R.id.gridview_item_label);
        holder.tv = (TextView) convertView
                .findViewById(R.id.gridview_item_name);
        convertView.setTag(holder);
    } else {
        holder = (ViewHoldler) convertView.getTag();
    }
    holder.tv.setText(getItem(position));
    holder.iv.setImageResource(this.ids[position]);
    return convertView;
}

private class ViewHoldler {
    ImageView iv;
    TextView tv;
}

首先,您需要在ViewHolder模式上实现适配器:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHoldler holder = null;
    if (convertView == null) {
        convertView = LayoutInflater.from(ctx).inflate(
                R.layout.frag_home_gridview_item, null, false);
        holder = new ViewHoldler();
        holder.iv = (ImageView) convertView
                .findViewById(R.id.gridview_item_label);
        holder.tv = (TextView) convertView
                .findViewById(R.id.gridview_item_name);
        convertView.setTag(holder);
    } else {
        holder = (ViewHoldler) convertView.getTag();
    }
    holder.tv.setText(getItem(position));
    holder.iv.setImageResource(this.ids[position]);
    return convertView;
}

private class ViewHoldler {
    ImageView iv;
    TextView tv;
}
第二次,使用
部分刷新机制
更改目标
视图
背景

private void refreshPartially(int position){
    int firstVisiblePosition = listview.getFirstVisiblePosition();
    int lastVisiblePosition = listview.getLastVisiblePosition();
    if(position>=firstVisiblePosition && position<=lastVisiblePosition){
        View view = listview.getChildAt(position - firstVisiblePosition);
        if(view.getTag() instanceof ViewHolder){
            ViewHolder vh = (ViewHolder)view.getTag();
            //holder.play.setBackgroundResource(resId);//Do something here.
            ...
        }
    }
}

仍然遇到同样的问题。我的代码中有什么需要更改的?很紧急。最终ViewHolder ViewHolder=新的ViewHolder();if(convertView==null){view=inflater.inflate(R.layout.list_item,null);}else{view=convertView;((ViewHolder)view.getTag()).fav.setTag(list.get(position));}参见SilentKnight的答案。他创建了ViewHolder。您需要创建ViewHolder类,并在其中包含自定义列表项的所有视图,然后在getView中执行相应的实现。我知道这是一个非常常见且简单的问题,但是是的,我创建了ViewHolder类并在holder类中添加了所有视图。我不知道我做错了什么?我已经拉刷新类列表视图,所以它将保持相同位置的图像背景?