0

私のアダプター(私のアプリの残りの部分で機能しているスタイル)が問題を引き起こしています。これは、切り替え可能なボタンを持つ最初のリストです。各 listItem には toggleButton があり、トグルして下にスクロールしてから上に戻ると、自動的にチェックが外れます。過去2日間、リサイクルの無効化からビューホルダーの追加まで、SOとは異なるソリューションを試してみましたが、どちらもうまくいきませんでした。

コードが少しごちゃごちゃしているように見えるかもしれませんが、理解できることを願っています。変数は変更されており、すべてのインスタンスを取得したと確信していますが、主にロジック/構文について助けが必要です。私が持っている ViewHolder コードの一部は表示していません。主な理由は、それがさらに混乱を招くからです。

私がそれぞれに等量の文字列値を送信した String[]s。

public class MyListAdapter extends BaseAdapter
{

Activity activity;

/**
 * String[] of sender Data
 */

String[] Id, Name, Alert, Instructions, RedText, dawcb; //Alert, Name, and a toggleButton are to be displayed in list

TextView status, date, prescription;

ImageView AlertIcon;

ToggleButton tb;

/**
 * Index of Selected Item
 */
private int _index = -1;

/**
 * Inflate Layout in Application Context
 */
private static LayoutInflater inflater = null;

public MultiRenewAdapter(Activity a, String[] Id, String[] Name, String[] Alert, String[] Instructions, String[] RedText, String[] dawcb)
{
    activity = a;
    this.Id = Id;
    this.Name = Name;
    this.Alert = Alert;
    this.Instructions = Instructions;
    this.RedText = RedText;
    this.dawcb = dawcb;

    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


//some code to help save selected items

static class ViewHolder {
protected ImageView alertIcon;
    protected TextView text;
    protected ToggleButton tb;
}

public int getCount()
{
    return Name.length;
}

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

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

//    I thought I could try turning off recycling (this is from another post here):
//    @Override
//    public int getViewTypeCount() {
//        //Count=Size of ArrayList.
//        return Name.length;
//    }
//
//    @Override
//    public int getItemViewType(int position) {
//
//        return position;
//    }



/**
 * Override Get View for custom format
 */
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View vi = convertView;//vi and convertView are null

    ViewHolder viewHolder = null;

    vi = inflater.inflate(R.layout.row_layout, null);

    viewHolder = new ViewHolder();

    positionInt = position;

//doesn't work since viewHolder is null, and is causing a null pointer exception
    //viewHolder.tb = (ToggleButton) vi.findViewById(R.id.toggleButton);
    //viewHolder.prescription = (TextView)    //vi.findViewById(R.id.prescription);
    //viewHolder.AlertIcon = (ImageView) vi.findViewById(R.id.AlertIcon);


    if (position == _index)
    {
vi.setBackgroundColor(activity.getResources().getColor(R.color.DeepSkyBlue));
    }
    else
    {
            vi.setBackgroundColor(activity.getResources().getColor(R.color.transparent));
        if (position % 2 == 0)
        {
            vi.setBackgroundColor(Color.TRANSPARENT);
        }
        else
        {
            vi.setBackgroundColor(Color.LTGRAY);
        }
    }

    if(convertView==null)
    {

        if (position % 2 == 0)
        {
            vi.setBackgroundColor(Color.TRANSPARENT);
        }
        else
        {
            vi.setBackgroundColor(Color.LTGRAY);
        }
    }

    tb = (ToggleButton) vi.findViewById(R.id.toggleButton);
    prescription = (TextView) vi.findViewById(R.id.prescription);
    AlertIcon = (ImageView) vi.findViewById(R.id.AlertIcon);

    if(Alert[position].equals("4")){
        AlertIcon.setBackgroundResource(R.drawable.checktemp);
    }else if(Alert[position].equals("3")){
        AlertIcon.setBackgroundResource(R.drawable.orange_diamond_temp);
    }else if(Alert[position].equals("2")){
        AlertIcon.setBackgroundResource(R.drawable.exclamation_red_temp);
    }else if(Alert[position].equals("1")){
        AlertIcon.setBackgroundResource(R.drawable.red_x_temp);
    } else {
        AlertIcon.setVisibility(View.INVISIBLE);
    }

    prescription.setText(Name[position]);

    return vi;
}
public void setClicked(int index)
{
    _index = index;
    this.notifyDataSetChanged();
}
} 

私はあらゆる助けを楽しみにしています。

ありがとうございました!

4

0 に答える 0