1

クリックすると行を太字に設定しようとしています。しかし、次のようにビューをTextViewに変換しようとすると、ClassCastExceptionが発生します-

setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
  int position, long id) {
            TextView tv = (TextView)view;
            tv.setTypeface(null, Typeface.BOLD);
        }
        });

私は何が間違っているのですか?どうすればいいですか?

編集:

私のアダプターは次のようになります-

public class CountryListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final ArrayList<String> names;

public CountryListAdapter(Activity context, ArrayList<String> names) {
    super(context, R.layout.rowlayout, names);
    this.context = context;
    this.names = names;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.rowlayout, null, true);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    textView.setText(names.get(position));

    return rowView;
}
}
4

2 に答える 2

7

アダプタコードは、失敗の主な原因を示しています。

アダプタコードによると、viewキャストするのはtextViewではなくrowViewです。したがって、その方法でもアクセスする必要があります。それがあなたが得る理由ですClassCastException

 public void onItemClick(AdapterView<?> parent, View view,
 int position, long id) {
        View rowView = view
        TextView tv = (TextView) rowView.findViewById(R.id.label);
        tv.setTypeface(null, Typeface.BOLD);
    }
    });
于 2011-11-16T22:29:03.077 に答える
0

あなたのリストアイテムは本当にTextViewですか?通常、これはより複雑な構造です(例:)LinearLayoutTextViewこの場合は、を使用してそのレイアウト内の問題を見つける必要がありますfindById()

于 2011-11-16T22:33:45.090 に答える