0

我正在尝试处理RelativeLayout定义 a 中的行ListView应该如何布局的句柄。我越来越空了,我相信这是因为两件事之一。

一种可能性是它还没有膨胀,所以它返回 null ......虽然我已经读过这个,但我对通货膨胀的概念非常不稳定。我已经用 Java 编程了 3 周(来自 C#)。所以我不确定如何测试,更不用说处理了。例如,我所做的只是将适配器设置为列表视图....不确定什么事件或何时发生通货膨胀。

可能性二是我没有正确地走树。

我的父母:

<RelativeLayout 
    android:minHeight="320dp" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/rlay_LftDataParent" 
    android:orientation="vertical" >

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:id="@+id/lstvw_LiftData" />

行定义(我试图为其设置最小高度的布局)

<RelativeLayout 
    android:layout_width="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/rlay_LftDataRw" 
    android:layout_height="fill_parent" 
    android:background="@drawable/background">
...
</RelativeLayout>

在我尝试过的活动中:(lstvw_LiftData 是我的 ListView 对象)

RelativeLayout RowLayout = (RelativeLayout)lstvw_LiftData.findViewById(R.id.rlay_LftDataRw);

RelativeLayout RowLayout = (RelativeLayout)findViewById(R.id.rlay_LftDataRw);

如果您想知道更大的图景,这是这篇文章的后续问题Using RelativeLayout to control a ListView row height我试图让行布局填满屏幕。

4

2 回答 2

1

您不能ViewListView带有 的行访问 a findViewById。而是使用适配器RelativeLayoutgetView方法中获取您的参考,并在那里设置宽度和高度。你没有说你使用什么适配器,所以这里是一个简单的基本示例ArrayAdapter

编辑: 您不要getView()自己调用该方法,适配器会在getView显示新行时自动调用该方法。关于您上次评论中的问题,如果自定义Adapter类是Activity您将使用它的内部类:

public class SomeActivity extends ListActivity {

     private int mHeight, mWidth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...do what ever stuff you need in this activity
       // find out the height/width values:
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        mHeight = metrics.heightPixels;
        mWidth = metrics.widthPixels;   
        // set the adapter
        setListAdapter(new CustomAdapter(this,
                R.layout.adapters_listview_rowheight, R.id.textView1, items));
    }

    //you use your own adapter class
    private class CustomAdapter extends ArrayAdapter<String> {

        public CustomAdapter(Context context, int resource,
                int textViewResourceId, String[] objects) {
            super(context, resource, textViewResourceId, objects);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                    //do whatever logic you need here
                    // finally you end up with the RelativeLayout you'll return as the view for the row
                    // before you return set the desired values for its width and height
            rl.getLayoutParams().height = mHeight;
            rl.getLayoutParams().width = mWidth;
            return rl;
        }


    }

}

如果您Adapter的类在另一个文件中,则使该适配器的构造函数采用int表示宽度和高度的两个值:

//the constructor
public CustomAdapter(/*whatever parameters you already have*/, int height, int width) {
    //do stuff
    //now you also have a reference for the width and height that you can use in the getView method.
}

并在您的Activity(使用 onCreate 方法的相同代码):

setListAdapter(new CustomAdapter(/*whatever parameters you already have*/, mHeight, mWidth));

我不知道这是不是你想要的。

于 2012-05-17T16:18:15.930 回答
0

您可以通过Adapter. 在类似的东西getView中,但取决于Adapter您使用的,它可能会有所不同。

于 2012-05-17T15:54:15.880 回答