gridview にラジオボタンを追加することは可能ですか? または、チェックボックスを gridview のラジオボタンのように機能させることはできますか?
4033 次
4 に答える
1
例を示します。ラジオボタンを使用することは本当に可能です。しかし、これは役立つはずの例です。もちろん、私はあなたにすべてを与えたわけではありませんが、これはそれが可能であることを示しているはずです
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.TableLayout;
import android.widget.TableRow;
public class ToggleButton extends TableLayout implements OnClickListener {
private static final String TAG = "ToggleButton";
private RadioButton activeRadioButton;
/**
* @param context
*/
public ToggleButton(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/**
* @param context
* @param attrs
*/
public ToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public void onClick(View v) {
final RadioButton rb = (RadioButton) v;
///////// do whatever /////////////
}
/* (non-Javadoc)
* @see android.widget.TableLayout#addView(android.view.View, int, android.view.ViewGroup.LayoutParams)
*/
@Override
public void addView(View child, int index,
android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
setChildrenOnClickListener((TableRow)child);
}
/* (non-Javadoc)
* @see android.widget.TableLayout#addView(android.view.View, android.view.ViewGroup.LayoutParams)
*/
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
setChildrenOnClickListener((TableRow)child);
}
private void setChildrenOnClickListener(TableRow tr) {
final int c = tr.getChildCount();
for (int i=0; i < c; i++) {
final View v = tr.getChildAt(i);
if ( v instanceof RadioButton ) {
v.setOnClickListener(this);
}
}
}
public int getCheckedRadioButtonId() {
if ( activeRadioButton != null ) {
return activeRadioButton.getId();
}
return -1;
}
}
このようなレイアウトを作成します(もちろん、それをクリーンアップする必要がありますが、アイデアは得られました)
<?xml version="1.0" encoding="utf-8"?>
<com.example.android.view.ToggleButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/radGroup1">
<TableRow>
<RadioButton android:id="@+id/rad1" android:text="Button1"
android:layout_width="105px" android:layout_height="wrap_content"
android:textSize="13px" />
<RadioButton android:id="@+id/rad2" android:text="Button2"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
<RadioButton android:id="@+id/rad3" android:text="Button3"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
</TableRow>
<TableRow>
<RadioButton android:id="@+id/rad1" android:text="Button1"
android:layout_width="105px" android:layout_height="wrap_content"
android:textSize="13px" />
<RadioButton android:id="@+id/rad2" android:text="Button2"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
<RadioButton android:id="@+id/rad3" android:text="Button3"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
</TableRow>
<TableRow>
<RadioButton android:id="@+id/rad1" android:text="Button1"
android:layout_width="105px" android:layout_height="wrap_content"
android:textSize="13px" />
<RadioButton android:id="@+id/rad2" android:text="Button2"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
<RadioButton android:id="@+id/rad3" android:text="Button3"
android:layout_width="105px" android:textSize="13px"
android:layout_height="wrap_content" />
</TableRow>
</com.example.android.view.ToggleButton>
于 2012-07-12T13:37:24.373 に答える
0
コードを編集します。RadioGridView は次のように変更する必要があります...
上記のコードでは、Gridview の最初の項目が更新されていないためです。
背景 mItemsBg は最初に設定する必要がありました...うーん...
public class RadioGridView extends LinearLayout {
private int mClickedPosition = -1;
private Context mContext;
private int[] mItems;
private int[] mItemsBg;
private ImageView[] iv_items;
RadioGridViewAdapter adapter;
public RadioGridView(Context context, int[] items) {
super(context);
this.mContext = context;
this.mItems = items;
init();
}
private void init() {
if (mItems != null) {
iv_items = new ImageView[mItems.length];
mItemsBg = new int[mItems.length];
for (int i = 0; i < mItems.length; i++) {
mItemsBg[i] = Color.WHITE;
}
GridView gv = new GridView(mContext);
addView(gv);
gv.setBackgroundColor(0xffffffff);
gv.setColumnWidth(50);
gv.setNumColumns(GridView.AUTO_FIT);
gv.setVerticalSpacing(10);
gv.setHorizontalSpacing(10);
gv.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
gv.setGravity(Gravity.CENTER);
adapter = new RadioGridViewAdapter();
gv.setAdapter(adapter);
gv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (mClickedPosition >= 0) {
mItemsBg[mClickedPosition] = Color.WHITE;
}
mItemsBg[position] = Color.RED;
mClickedPosition = position;
adapter.notifyDataSetChanged();
if (mOnGridItemClickListener != null) {
mOnGridItemClickListener.onItemClick(position);
}
}
});
}
}
/*********************************************************
* Listener Interface
********************************************************/
public interface OnGridItemClickListener {
public void onItemClick(int position);
}
public OnGridItemClickListener mOnGridItemClickListener = null;
public void setOnGridItemClickListener(OnGridItemClickListener l) {
mOnGridItemClickListener = l;
}
/*********************************************************
* RadioGidViewAdapter
*********************************************************/
class RadioGridViewAdapter extends BaseAdapter {
@Override
public int getCount() {
return mItems.length;
}
@Override
public Object getItem(int position) {
return mItems[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new ImageView(mContext);
}
iv_items[position] = (ImageView) convertView;
iv_items[position].setImageResource(mItems[position]);
iv_items[position].setBackgroundColor(mItemsBg[position]);
return convertView;
}
}
}
于 2013-01-03T09:11:26.420 に答える
0
チェックボックスを使用して機能させました。ここでcheckedVideoは、チェックされているチェックボックスの値を保持するブール配列です。
selectCB.setId(position);
selectCB.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
int id = cb.getId();
Log.i(LOG_TAG, "Clicked ? "+id);
if(checkedVideo[id])
{
checkedVideo[id] = false;
cb.setChecked(false);
}
else
{
for(int index = 0; index < count; index++)
{
checkedVideo[index] = false;
}
checkedVideo[id] = true;
cb.setChecked(true);
notifyDataSetChanged();
}
}
});
Log.i(LOG_TAG, "Checked ? "+checkedVideo[position]);
selectCB.setChecked(checkedVideo[position]);
于 2012-07-12T14:07:10.840 に答える