カスタム アダプタに問題がListView
あり、アイテムをクリックしたときに間違った位置が取得されます。
基本的に、アダプター内のアイテムの名前は、アイテムがクリックされると別のアクティビティに送信され、スクロールする前に正常に動作します。ただし、スクロール時にのみ表示されるアイテムは正しい位置を送信しません。スクロールする前に、ビュー内のアイテムの対応する位置を送信しているように見えます (これは、ビューのリサイクルで意味があります)。
これListView
にはおそらく多くのアイテムが含まれないため、ビューのリサイクルを無効にすることができれば大きな問題にはなりませんが、スクロールして正しい位置を送信できるように問題を修正したいと考えています.
私はかなり新しい Android 開発者で、これが私が作成した最初のアプリだったので、オンライン チュートリアルからこのカスタム アダプターを入手したので、少し奇妙に見えたら申し訳ありません。
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.country_info, null);
holder = new ViewHolder();
holder.item = ((TextView)convertView.findViewById(R.id.infoBox));
convertView.setTag(holder);
holder.item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Country country = countryList.get(position);
String s = (String)(country.getName());
Intent i = new Intent(SecondScreenActivity.this, ThirdScreenActivity.class);
i.putExtra("position", s);
startActivity(i);
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
Country country = countryList.get(position);
holder.item.setText(country.getName());
holder.favourite.setChecked(country.isSelected());
holder.favourite.setTag(country);
return convertView;
}
注: このメソッドは項目のチェックボックスがチェックされているかチェックされていないかをチェックし、この問題を解決しやすくするためにそのコードを削除したため、このコードが欠落しているか、あちこちに余分な括弧がいくつかある可能性があります。
助けてくれてありがとう!