私はゲームを開発しており、GridView としてインベントリを持っています。各グリッド項目は、クリックすると選択される GameObject です。ゲームは、ユーザーが単一のオブジェクトを選択するか、オブジェクトを結合できることを示しています。
私が必要とするのは非常に具体的です:ユーザーがメニューボタンを押してオプションメニューが表示されたときに(「結合」オプションを使用して)、いくつかのアイテムを複数選択するために、各グリッドアイテムにチェックボックスを動的に描画する必要があります(非常に似ていますギャラリーでは、画像ではなくオブジェクトを使用して)、それらを結合します。
私は API レベル 8 を使用しているため、MultiChoiceMode は苦労しています。
また、チェックボックスを使用するのではなく、この機能を実装する方法について誰かがより良い提案をしている場合、私はきっとそれを受け入れるでしょう. 事前にサンクス
グリッド項目の xml は次のとおりです。
<ImageView
android:id="@+id/grid_item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<CheckBox
android:id="@+id/image_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:visibility="invisible" />
および gridView:
<TextView
android:id="@+id/inventoryMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="#000000"
android:gravity="center"
android:text="@string/inventory"/>
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/inventoryMsg"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="3"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
これは私の CustomAdapter の getViewMethod です。
public View getView (int position, View convertView, ViewGroup parent) {
View v = convertView;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater layoutInflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = layoutInflater.inflate(R.layout.griditem, null);
holder.gameItemCheck = (CheckBox) v.findViewById(R.id.image_check);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.gameItemCheck.setId(position);
holder.gameItemCheck.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
//dosomestuff
}
});
GameObject gameObject = gameObjectList.get(position);
ImageView gameItemImageView = (ImageView) v.findViewById(R.id.grid_item_image);
holder.gameItemCheck.setChecked(Inventory.selected[position]);
holder.id = position;
return v;
}
public class ViewHolder {
public CheckBox gameItemCheck;
int id;
}
チェックボックスの可視性を動的に変更しようとした方法:
1)
public boolean onKeyDown(int keycode, KeyEvent e) {
switch (keycode) {
case KeyEvent.KEYCODE_MENU:
openOptionsMenu();
gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
gridView.refreshDrawableState();
return true;
}
return super.onKeyDown(keycode, e);
}
2)
public boolean onPrepareOptionsMenu(Menu menu) {
gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
gameObjectAdapter.notifyDataSetChange();
return true;
}