次のレイアウトを持つアイテムでリストビューを使用したい
-------------------------
[CB] TV TV
-------------------------
CBはチェックボックスで、TVはTextviewです。
リストビューでクリック可能なアイテムを使用できないことをどこかで読みました。いくつかある場合は、ListItemsをクリックすることはできません。しかし、GoogleMailアプリを見ると、これは可能です。チェックボックスで複数のメッセージにマークを付けて(そしてそれらのアクションを選択できます)、ListItemをクリック(またはdpadでスクロール)して別の画面に移動できます。誰かがこれを可能にするコード/例を持っていますか?
XMLレイアウトでCheckBox
をfocusable="false"
として設定します。それ以外の場合は、リストビューからクリックイベントを盗みます。
もちろん、これを行う場合、CheckBox
の代わりにリスト項目がクリックされた場合、CheckBox
をチェック済み/未チェックとして手動でマークする必要がありますが、とにかくそれが必要です。
リストビューアダプタを「simple_list_item_multiple_choice」に設定します
ArrayAdapter<String> adapter;
List<String> values; // put values in this
//Put in listview
adapter = new ArrayAdapter<UserProfile>(
this,
Android.R.layout.simple_list_item_multiple_choice,
values);
setListAdapter(adapter);
holder.checkbox.setTag(row_id);
そして
holder.checkbox.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox c = (CheckBox) v;
int row_id = (Integer) v.getTag();
checkboxes.put(row_id, c.isChecked());
}
});
このコードは私のプロジェクトで動作し、リストビュー項目とチェックボックスを選択できます
<?xml version="1.0" encoding="utf-8"?>
<!-- Single List Item Design -->
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:clickable="true" >
<TextView
Android:id="@+id/label"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="4" />
<CheckBox
Android:id="@+id/check"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:focusable="false"
Android:text="" >
</CheckBox>
</LinearLayout>
以下のコードが役立ちます:
public class DeckListAdapter extends BaseAdapter{
private LayoutInflater mInflater;
ArrayList<String> teams=new ArrayList<String>();
ArrayList<Integer> teamcolor=new ArrayList<Integer>();
public DeckListAdapter(Context context) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
teams.add("Upload");
teams.add("Download");
teams.add("Device Browser");
teams.add("FTP Browser");
teams.add("Options");
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
}
public int getCount() {
return teams.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.decklist, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow);
holder.text = (TextView) convertView.findViewById(R.id.textname);
.......here you can use holder.text.setonclicklistner(new View.onclick.
for each textview
System.out.println(holder.text.getText().toString());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(teams.get(position));
if(position<teamcolor.size())
holder.text.setBackgroundColor(teamcolor.get(position));
holder.icon.setImageResource(R.drawable.arraocha);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView text;
}
}
お役に立てれば。