誰かが私を完全に狂ってしまう前に助けてください。AndroidのListViewで項目を選択すると奇妙な動作が発生する
リストビューがあるとします。それには9項目ありますが、スクロールせずに6を表示するスペースしかありません。項目が選択されている場合は、背景色がこの値を示すように変わります。
2から8までの項目を選択すると、すべてが世界で良好です。
項目1を選択すると、項目9とその逆も選択されます。また、ランダムな回数だけ上下にスクロールすると、選択が変更されます。上下にスクロールし続けると、選択範囲は1と9に戻ります。選択した項目の値は、常に選択した実際の項目です。
これは私のアダプターからの私のコードです:
public class AvailableJobAdapter extends ArrayAdapter<JobDto> {
private Context context;
private ArrayList<JobDto> items;
private LayoutInflater vi;
public AvailableJobAdapter(Context context, ArrayList<JobDto> items) {
super(context, 0, items);
this.context = context;
this.items = items;
vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
JobDto jh = getItem(position);
if (convertView == null) {
convertView = vi.inflate(R.layout.inflator_job_list, null);
holder = new ViewHolder();
holder.numberText = (TextView) convertView.findViewById(R.id.txtNumber);
holder.descriptionText = (TextView) convertView.findViewById(R.id.txtDescription);
holder.statusText = (TextView) convertView.findViewById(R.id.txtStatus);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.numberText.setText(jh.getJobNumber());
holder.descriptionText.setText(jh.getDescription());
holder.statusText.setText(jh.getStatus());
return convertView;
}
public static class ViewHolder {
public TextView numberText;
public TextView descriptionText;
public TextView statusText;
}
}
と、これは私のクリックのリスナーからのコードです:
jobs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Button btnOk = (Button) findViewById(R.id.btnOk);
view.setSelected(true);
int selected = position;
int pos = val.get(selected);
int firstItem = jobs.getFirstVisiblePosition();
int viewIndex = selected - firstItem;
if (pos == 0) {
jobs.getChildAt(viewIndex).setBackgroundColor(getResources().getColor(R.color.selected));
val.set(selected, 1);
selectedCount ++;
} else {
jobs.getChildAt(viewIndex).setBackgroundColor(getResources().getColor(R.color.unselected));
val.set(selected, 0);
selectedCount --;
}
if (selectedCount > 0){
btnOk.setEnabled(true);
} else {
btnOk.setEnabled(false);
}
}
});
私はこれを研究し、さまざまな提案を試みるのに数時間を費やしました。
ご協力いただきますようお願い申し上げます。
**** EDIT **** いくつかの提案をした後、巨大なリストでテストしました。
アイテム1を選択した場合、あなたの画面は、10の項目のためのスペースを持っている場合、それはまた、これらの値の間では11、21、31、41など
何が正しく動作浮き彫りに - :これは動作が正確に何であります。
「val」とは何ですか?私は宣言が表示されません –
valは、複数の選択を記憶するために使用している整数のArrayListです – MagicWand