0

基本上我需要创建:左侧的复选框和右侧的图像视图。像这样的东西:

在此处输入图像描述

这些纵向组合应该是 3xN,N 是行数的整数。为此,我认为使用网格视图会很好,但我对网格没有太多经验。所以我开始写适配器:

我得到了这个方法:

@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;
} 

也许我应该在那里创建一个复选框视图和图像视图。这有效,但图像低于复选框,如何将它们放在一行中?

谢谢。

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

不要动态添加复选框和图像。相反,您可以做的是创建一个 XML 文件,该文件将包含一个复选框和一个您需要的水平方向的 ImageView,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 回答