私のアダプター(私のアプリの残りの部分で機能しているスタイル)が問題を引き起こしています。これは、切り替え可能なボタンを持つ最初のリストです。各 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();
}
}
私はあらゆる助けを楽しみにしています。
ありがとうございました!