0

基本的に私は作成する必要があります:左側のチェックボックスと右側の画像ビュー。このようなもの:

ここに画像の説明を入力

縦向きのこれらの組み合わせは 3xN である必要があり、N は行数の int です。このためには、グリッド ビューを使用するとよいと思いましたが、グリッドの経験はあまりありません。だから私はアダプターを書き始めました:

私はこの方法を得ました:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    CheckBox check = null;
    ImageView pic = null;

    LinearLayout view = new LinearLayout(mContext);
    view.setOrientation(LinearLayout.VERTICAL);

        check = new CheckBox(mContext);
        check.setTag(position);

        view.addView(check); 

        pic = new ImageView(mContext);
        pic.setImageResource(R.drawable.btn_star);

        view.addView(pic); 


    return view;
} 

たぶん、チェックボックスと画像ビューのビューを1つ作成する必要があります。これはうまくいきましたが、画像はチェックボックスよりも低くなっています。それらを1行にするにはどうすればよいですか?

ありがとう。

4

3 に答える 3

2

griview コンテンツ用に別のレイアウトを作成する

例:gridview_custom.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" android:gravity="center">

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_launcher" android:layout_marginLeft="10dip"/>

</LinearLayout>

次に、カスタム アダプターを作成しGridView、オーバーライドします。getView()

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

    View v = convertView; 
     CheckBox check = null;
             ImageView pic = null;


    if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
    LayoutInflater vi = 
            (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.gridview_custom, null);
     } 

    pic = (ImageView)v.findViewById(R.id.imageView1);
    check = (CheckBox) v.findViewById(R.id.checkBox1);
    return v;

}
于 2012-05-24T08:49:30.617 に答える
0

レイアウトは固定なので、XML ファイルでレイアウトを指定し、それを使用してビューを作成する方が簡単です。HORIZONTALただし、オリエンテーションを使用する必要があります。また、ビューの再利用にも注意してください (再利用可能なインスタンスがconvertViewパラメーターで渡されます。そうでない場合はそれを使用してくださいnull)。

于 2012-05-24T08:36:51.527 に答える
0

チェックボックスと画像を動的に追加しないでください。代わりに、必要に応じてチェックボックスと水平方向の ImageView を含む XML ファイルを作成すると、getView 関数は次のようになります。

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

if (CONTEXT != null) {


        final LayoutInflater lInflater = (LayoutInflater) CONTEXT
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View view = lInflater.inflate(R.layout.your_xml, null);
        final CheckBox checkBox = (CheckBox) view
                .findViewById(R.id.checkbox);

        final ImageView ivIcon = (ImageView) view.findViewById(R.id.icon_image);
        ivIcon.setImageResource(A.this.getResources().getDrawables(R.id.image));
        return view;
        }
        else {
        return null;
        }
}

ありがとうございました :)

于 2012-05-24T08:50:35.460 に答える