このコードはオンラインのチュートリアルで見つけたので、少し奇妙であれば申し訳ありませんが、動作することがわかった唯一のコードです。
ListView
各行には aとCheckBox
aがありTextView
ます。ページ上のボタンをクリックすると、チェックボックスがオンになっている行の名前が のTextView
上に別の場所に表示されますListView
。
少なくとも 1 つの行がチェックされている限り、これはすべて正常に機能します。4つのチェックボックスをオンにしてボタンを押すと、4つの名前がすべて表示され、2つのチェックボックスをオフにすると、残りの2つの名前だけが表示されます.
ただし、私の問題は、チェックボックスがチェックされていない場合TextView
、最後CheckBox
にチェックされていない名前が表示されることです(アプリを起動してから少なくとも1つがチェックされていると仮定します)。
これはなぜですか。また、チェックボックスがチェックされていないときに何も表示されないようにするにはどうすればよいですか?
onCreate で呼び出されるアダプターとメソッドを次に示します。
private class MyCustomAdapter extends ArrayAdapter<Country> {
private ArrayList<Country> countryList;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<Country> countryList) {
super(context, textViewResourceId, countryList);
this.countryList = new ArrayList<Country>();
this.countryList.addAll(countryList);
}
private class ViewHolder {
TextView item;
CheckBox favourite;
}
@Override
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));
holder.favourite = ((CheckBox)convertView.findViewById(R.id.checkBox1));
convertView.setTag(holder);
holder.favourite.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
Country country = (Country) cb.getTag();
country.setSelected(cb.isChecked());
}
});
} 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;
}
}
private void checkButtonClick() {
Button myButton = (Button) findViewById(R.id.findSelected);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String stringName = "";
ArrayList<Country> countryList = dataAdapter.countryList;
for(int i=0;i<countryList.size();i++){
Country country = countryList.get(i);
if(country.isSelected()){
stringName = (stringName + country.getName());
TextView t = ((TextView)findViewById(R.id.textView1));
t.setText(stringName);
}
}
}
});
コンパイルまたは実行時にエラーが表示されないため、残念ながら logCat を投稿できません。
助けてくれてありがとう