Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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 无法在listview中获得正确的位置_Android - Fatal编程技术网

Android 无法在listview中获得正确的位置

Android 无法在listview中获得正确的位置,android,Android,当我试图改变列表视图中位置1的背景色时,位置1和位置5的背景色都会改变 public class MyAdapter extends ArrayAdapter<Item> { private final Context context; private final ArrayList<Item> itemsArrayList; static class ViewHolder { TextView textday; TextView text1;

当我试图改变列表视图中位置1的背景色时,位置1和位置5的背景色都会改变

public class MyAdapter extends ArrayAdapter<Item> {


private final Context context;
private final ArrayList<Item> itemsArrayList;

static class ViewHolder {

    TextView textday;
    TextView text1;
    TextView text2;
    TextView text3;

}

public MyAdapter(Context context, ArrayList<Item> itemsArrayList) {

    super(context, R.layout.list_row, itemsArrayList);

    this.context = context;
    this.itemsArrayList = itemsArrayList;
}


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

    ViewHolder viewHolder;
    if(convertView==null){


        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        convertView = inflater.inflate(R.layout.list_row, parent, false);

        viewHolder = new ViewHolder();

        viewHolder.textday = (TextView)convertView.findViewById(R.id.w1);
        viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1);
        viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2);
        viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3);



        convertView.setTag(viewHolder);
    }

    else{

        viewHolder = (ViewHolder) convertView.getTag();
    }



    viewHolder.text1.setText(itemsArrayList.get(position).getTitle());
    viewHolder.text2.setText(itemsArrayList.get(position).getDescription());
    viewHolder.text3.setText(itemsArrayList.get(position).getthird());
    viewHolder.textday.setText(itemsArrayList.get(position).getDay());

    viewHolder = (ViewHolder)convertView.getTag();

    if(position == 1 )
    {
        convertView.setBackgroundColor(Color.parseColor("#00796b"));
        viewHolder.text1.setTextColor(Color.parseColor("#ffffff"));
        viewHolder.text2.setTextColor(Color.parseColor("#ffffff"));
        viewHolder.text3.setTextColor(Color.parseColor("#ffffff"));
    }

    return convertView;

}


}
公共类MyAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终阵列列表项阵列列表;
静态类视窗夹{
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
公共MyAdapter(上下文上下文,ArrayList itemsArrayList){
super(上下文,R.layout.list_行,itemsArrayList);
this.context=上下文;
this.itemsArrayList=itemsArrayList;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(R.layout.list_行,父项,false);
viewHolder=新的viewHolder();
viewHolder.textday=(TextView)convertView.findViewById(R.id.w1);
viewHolder.text1=(TextView)convertView.findViewById(R.id.l1);
viewHolder.text2=(TextView)convertView.findViewById(R.id.l2);
viewHolder.text3=(TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position.getTitle());
viewHolder.text2.setText(itemsArrayList.get(position.getDescription());
viewHolder.text3.setText(itemsArrayList.get(position.getthird());
viewHolder.textday.setText(itemsArrayList.get(position.getDay());
viewHolder=(viewHolder)convertView.getTag();
如果(位置==1)
{
convertView.setBackgroundColor(Color.parseColor(#00796b));
viewHolder.text1.setTextColor(Color.parseColor(“#ffffff”));
viewHolder.text2.setTextColor(Color.parseColor(“#ffffffff”);
viewHolder.text3.setTextColor(Color.parseColor(“#ffffffff”);
}
返回视图;
}
}

将此方法放入适配器类中

@Override
public int getViewTypeCount() {
    return YourList.size();
}

@Override
public int getItemViewType(int position) {
    return position;
}

我已经更改了你的代码。如果它不起作用,请告诉我。但不工作的机会最少

    public class MyAdapter extends ArrayAdapter<Item> {


        private final Context context;

        private final ArrayList<Item> itemsArrayList;

        static class ViewHolder {

        TextView textday;
        TextView text1;
        TextView text2;
        TextView text3;

    }

    public MyAdapter(Context context, ArrayList<Item> itemsArrayList) {

        super(context, R.layout.list_row, itemsArrayList);

        this.context = context;
        this.itemsArrayList = itemsArrayList;
    }

    @Override
    public int getCount() {
        return itemsArrayList.size();
    }

    @Override
    public Object getItem(int location) {
        return itemsArrayList.get(location);
    }

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

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

        ViewHolder viewHolder;
        if(convertView==null){


            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            convertView = inflater.inflate(R.layout.list_row, parent, false);

            viewHolder = new ViewHolder();

            viewHolder.textday = (TextView)convertView.findViewById(R.id.w1);
            viewHolder.text1 = (TextView)convertView.findViewById(R.id.l1);
            viewHolder.text2 = (TextView)convertView.findViewById(R.id.l2);
            viewHolder.text3 = (TextView)convertView.findViewById(R.id.l3);



            convertView.setTag(viewHolder);
        }

        else{

            viewHolder = (ViewHolder) convertView.getTag();
        }



        viewHolder.text1.setText(itemsArrayList.get(position).getTitle());
        viewHolder.text2.setText(itemsArrayList.get(position).getDescription());
        viewHolder.text3.setText(itemsArrayList.get(position).getthird());
        viewHolder.textday.setText(itemsArrayList.get(position).getDay());

     /* no need again access viewHolder over here you already done this part   viewHolder = (ViewHolder)convertView.getTag();  so remove this part*/

        if(position == 1 )
        {
            convertView.setBackgroundColor(Color.parseColor("#00796b"));
            viewHolder.text1.setTextColor(Color.parseColor("#ffffff"));
            viewHolder.text2.setTextColor(Color.parseColor("#ffffff"));
            viewHolder.text3.setTextColor(Color.parseColor("#ffffff"));
        }else{
             //add this additional code to change old color if position is not equal to zero.
            convertView.setBackgroundColor(Color.parseColor("replaceColorCode"));
            viewHolder.text1.setTextColor(Color.parseColor("replaceColorCode"));
            viewHolder.text2.setTextColor(Color.parseColor("replaceColorCode"));
            viewHolder.text3.setTextColor(Color.parseColor("replaceColorCode"));

    }
        return convertView;
    }
    }
公共类MyAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终阵列列表项阵列列表;
静态类视窗夹{
TextView textday;
TextView text1;
TextView text2;
TextView text3;
}
公共MyAdapter(上下文上下文,ArrayList itemsArrayList){
super(上下文,R.layout.list_行,itemsArrayList);
this.context=上下文;
this.itemsArrayList=itemsArrayList;
}
@凌驾
public int getCount(){
return itemsArrayList.size();
}
@凌驾
公共对象getItem(int位置){
returnitemsarraylist.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
convertView=充气机。充气(R.layout.list_行,父项,false);
viewHolder=新的viewHolder();
viewHolder.textday=(TextView)convertView.findViewById(R.id.w1);
viewHolder.text1=(TextView)convertView.findViewById(R.id.l1);
viewHolder.text2=(TextView)convertView.findViewById(R.id.l2);
viewHolder.text3=(TextView)convertView.findViewById(R.id.l3);
convertView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.text1.setText(itemsArrayList.get(position.getTitle());
viewHolder.text2.setText(itemsArrayList.get(position.getDescription());
viewHolder.text3.setText(itemsArrayList.get(position.getthird());
viewHolder.textday.setText(itemsArrayList.get(position.getDay());
/*无需再次访问此处的viewHolder您已完成此部分viewHolder=(viewHolder)convertView.getTag();因此请删除此部分*/
如果(位置==1)
{
convertView.setBackgroundColor(Color.parseColor(#00796b));
viewHolder.text1.setTextColor(Color.parseColor(“#ffffff”));
viewHolder.text2.setTextColor(Color.parseColor(“#ffffffff”);
viewHolder.text3.setTextColor(Color.parseColor(“#ffffffff”);
}否则{
//如果位置不等于零,则添加此附加代码以更改旧颜色。
convertView.setBackgroundColor(Color.parseColor(“replaceColorCode”);
viewHolder.text1.setTextColor(Color.parseColor(“replaceColorCode”);
viewHolder.text2.setTextColor(Color.parseColor(“replaceColorCode”);
viewHolder.text3.setTextColor(Color.parseColor(“replaceColorCode”);
}
返回视图;
}
}

显然
if(position==1)
也应该有
else
部分。你应该在那里设置默认颜色。是的,但是问题出现了,因为我使用了viewholder。在使用viewholder之前,它正在工作。我使用viewholder使列表视图平滑地滚动:)哈哈,它只是摆脱了列表视图的整个循环思想。。。这就是制作糟糕应用程序的原因。@SarojRaut这是一个糟糕的解决方案。。。这与您根本不使用ViewHolder和在每次getView调用中膨胀视图相同当我不使用ViewHolder时,我的列表视图在滚动过程中会滞后。这个方法对我来说很有效,可以得到正确的位置:)