1

のカスタムを作成しArrayAdapterましたSpinner。違いは、ArrayListプレーン テキストではなく複雑なクラスの画像を表示することです。これまでのところ動作します。イメージとラジオ ボタンが必要に応じて表示されます。問題は、ドロップダウン ビューが正しく動作しないことです。クリックしても閉じず、ビュー全体ではなくラジオ ボタンのみをクリックできます。

誰が何が悪いのか考えていますか?何らかの種類を実装する必要がありますlisteneradapter??

getDropDownViewメソッドのコードは次のとおりです。

@Override
    public View getDropDownView(int position, View convertView,
                                ViewGroup parent) {

        LayoutInflater inflater=(LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout view=(LinearLayout)inflater.inflate(R.layout.spinnerimageitem, null);

        ImageView iv=(ImageView)view.getChildAt(0);
        RadioButton rb=(RadioButton)view.getChildAt(1);

        int iImageID=ctx.getResources().getIdentifier(
                "f_"+funcs.get(position).getBitmapSetup(), 
                "drawable", ctx.getPackageName());  
        if(loco.getFunction(iIndex).equals(funcs.get(position)))
            rb.setChecked(true);
        iv.setImageResource(iImageID);
        return(view);
    }
4

3 に答える 3

7

android:focusable="false"ラジオボタンのレイアウトに設定します。

于 2013-02-21T10:42:14.097 に答える
1

同じ問題がありました。後でこの問題が発生する人のために、解決策の 1 つを見つけました。

public class MyActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Spinner spinner = (Spinner)findViewById(R.id.spinner);
    ArrayList<String> items = new ArrayList<String>();
    for (int i=1; i<6; i++) items.add("Spinner item "+i);
    spinner.setAdapter(new SpinnerAdapter(this,R.layout.spinner_item_list,items));
}

public class SpinnerAdapter extends ArrayAdapter<String> {
    private ArrayList<Boolean> mChecked;
    private ArrayList<String> mValues;
    private Context mContext;
    public SpinnerAdapter(Context context, int resourceId, ArrayList<String> values) {
        super(context, resourceId, values);
        mValues = values;
        mContext = context;
        mChecked = new ArrayList<Boolean>();
        for (int i=0; i<mValues.size(); i++){
            mChecked.add(false);
        }
    }
    @Override
    public View getDropDownView(int position, View convertView,ViewGroup parent) {
            View row= View.inflate(mContext,R.layout.spinner_item_list, null);
            TextView label=(TextView)row.findViewById(R.id.textView);
            label.setText(mValues.get(position));
            RadioButton rb = (RadioButton)row.findViewById(R.id.radioButton);
            rb.setFocusable(false);
            rb.setClickable(false);
            rb.setChecked(mChecked.get(position));
            return row;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = View.inflate(mContext,R.layout.spinner_item_top, null);
        TextView label=(TextView)row.findViewById(R.id.textView);
        label.setText(mValues.get(position));
        for(int i=0; i<mChecked.size(); i++){
            mChecked.set(i,(i==position));
        }
        return row;
    }
}
}

spinner_item_list.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"                     xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView" android:layout_centerVertical="true"/>
<RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/radioButton" android:layout_alignParentRight="true"     android:checked="false"/>
 </RelativeLayout>

spinner_item_top.xml

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/textView"></TextView>
于 2013-10-12T14:00:10.007 に答える
0

あなたはこのように試しましたか:

@Override
public View getDropDownView(int position, View convertView,
                            ViewGroup parent) {
    View view = convertView;
    if(view == null){
        LayoutInflater inflater=(LayoutInflater)
                   tx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=(LinearLayout)inflater.inflate(R.layout.spinnerimageitem, null);
    }
     /// your code ....
     return view;
 }
于 2013-02-21T10:54:38.373 に答える