2

カスタムアダプターでリストビューを作成しました。5 つのテキストビュー、1 つのチェックボックス、1 つのボタンがあります。

-------------------------------------
    <TextView>  
    <TextView>   <checkbox>
    <TextView>  
    <TextView>    <button>
    <TextView>  
-------------------------------------

リスト内のテキストビューを設定するために使用している配列リストには、適切な一意のデータがあります。しかし、リストビューは最初の 4 つから 5 つの値のみを取得し、リストの残りの部分でそれを繰り返します。

また、スクロールすると、表示される値が自動的に変わります。たとえば、アイテム A が最初の位置に表示されました。そのため、下にスクロールして再度上に移動すると、項目 C または項目 D が表示されます。

それは本当に私を混乱させます!助けてください!

カスタム アダプター コード

protected class MyCustomAdapter extends ArrayAdapter<String>
{
    int len;
    private SparseBooleanArray mCheckStates;
    private SparseBooleanArray favourites;

    ArrayList<String> myMake, myModel, myVer, myPrice, myPlace, sellr_pos;
    int count = 0;
    ViewHolder holder = null;
    Boolean status;

    public MyCustomAdapter(Context context, int textViewResourceId,

    ArrayList<String> car_make, ArrayList<String> car_model,
            ArrayList<String> car_version, ArrayList<String> car_price,
            ArrayList<String> car_place, ArrayList<String> sellr_pos) {
        super(context, textViewResourceId);

        mCheckStates = new SparseBooleanArray(car_model.size());
        favourites = new SparseBooleanArray(car_model.size());

        myMake = car_make;
        myModel = car_model;
        myVer = car_version;
        myPrice = car_price;
        myPlace = car_place;

    }

    private class ViewHolder {
        TextView txt1, txt2, txt3, txt4, txt5;
        CheckBox chkbox;
        Button btn_fav;
    }

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

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

        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.text_adaptr, null);
            holder = new ViewHolder();

            holder.txt1 = (TextView) convertView.findViewById(R.id.text1);
            holder.txt2 = (TextView) convertView.findViewById(R.id.text5);
            holder.txt3 = (TextView) convertView.findViewById(R.id.text3);
            holder.txt4 = (TextView) convertView.findViewById(R.id.text4);
            holder.txt5 = (TextView) convertView.findViewById(R.id.text2);

            System.out.println("ListView position: " + position);

            holder.txt1.setText(myMake.get(position));
            holder.txt2.setText(myModel.get(position));
            holder.txt3.setText(myVer.get(position));
            holder.txt4.setText(myPrice.get(position));
            holder.txt5.setText(myPlace.get(position));

            holder.chkbox = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);
            holder.btn_fav = (Button) convertView.findViewById(R.id.fav);

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.chkbox.setTag(position);

        holder.chkbox.setChecked(mCheckStates.get(position, false));

        if (favourites.get(position, false)) {

            holder.btn_fav.setBackgroundResource(R.drawable.star);


        } else {
            holder.btn_fav.setBackgroundResource(R.drawable.star_grey);

        }

        len = fav_ids.size();

        System.out.println("FAV_IDS len:" + len);

        for (int t = 0; t < len; t++) {

            String pos_id = pos.get(position).trim();
            String fav_id = fav_ids.get(t).trim();

            if (pos_id.equals(fav_id)) {


                holder.btn_fav.setBackgroundResource(R.drawable.star);

                break;

            } else {

                holder.btn_fav.setBackgroundResource(R.drawable.star_grey);
            }

        }

        holder.chkbox.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

            // Do something

            }
        });

        holder.btn_fav.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                // Do something

            }
        });

        return convertView;
    }
}
4

1 に答える 1

3

値を TextView に設定します。

if (convertView == null) {
....code...
........../.

/*
you are setting values here
remove it from here
*/
 holder.txt1.setText(myMake.get(position));
            holder.txt2.setText(myModel.get(position));
            holder.txt3.setText(myVer.get(position));
            holder.txt4.setText(myPrice.get(position));
            holder.txt5.setText(myPlace.get(position));
}
else
{
....code...
}


/*
Set values here
it will solve the problem
*/
holder.txt1.setText(myMake.get(position));
            holder.txt2.setText(myModel.get(position));
            holder.txt3.setText(myVer.get(position));
            holder.txt4.setText(myPrice.get(position));
            holder.txt5.setText(myPlace.get(position));

それは私の問題を解決します

于 2014-08-02T12:01:05.813 に答える