如何在列表已填充后以编程方式更改列表元素的高度

5
我正在处理一份新闻列表。我的列表是一个扩展了ListActivityActivity。我还创建了一个ArrayAdapter来填充列表元素。这个ArrayAdapter使用一个简单的布局,包含一个ImageView和两个TextView。一切正常,但是当我重写onListItemClick()方法并尝试在点击列表元素时调整它们的大小时,什么也没有发生。
protected void onListItemClick(ListView l, View v, int position, long id) {
    v.getLayoutParams().height=300;
}

我已经尝试了上述方法,同样使用了LayoutParams

这是我用来填充列表的每一行的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:background="@color/white"
     >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/ic_launcher" >
    </ImageView>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

    <TextView
        android:id="@+id/title1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textColor="@color/black"
        android:textColorHint="@color/black"
        android:textSize="10dp"
        android:textStyle="bold" >

    </TextView>  

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textColor="@color/black"
        android:textColorHint="@color/black"
        android:textSize="10dp" >

    </TextView>
    </LinearLayout>

</LinearLayout> 

有没有人遇到相同的问题? 能否对于 Android 初学者进行一些解释?
1个回答

6

我终于找到了解决我的问题的方法,我想与社区的其他人分享。

我正在使用ArrayAdapter来填充我的行布局,以下是它的代码:

public class MySimpleArrayAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;
    private final Bitmap[] images;
    private final String[] names;

    public MySimpleArrayAdapter(Context context, String[] values, Bitmap[] images, String [] names) {
        super(context, R.layout.rowlayout, values);
        this.context = context;
        this.values = values;
        this.images=images;
        this.names=names;
    }


    View rowView;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //View rowView;
        
        rowView = inflater.inflate(R.layout.rowlayout, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView title=(TextView) rowView.findViewById(R.id.title1);
        textView.setText(values[position]);
        imageView.setImageBitmap(images[position]);
        title.setText(names[position]);
        return rowView;
    }
} 

我的主活动继承自ListActivity,在这个列表中的项目是通过asynctask从一些json文件中获取的。在AsyncTask的onPostExecute方法中,使用获取到的项目创建了我的列表。

以下是onListItemClick方法的代码:

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    int hei=v.getLayoutParams().height;
    System.out.println("Height   "+hei);
    if (hei==LayoutParams.WRAP_CONTENT) {
        v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,105));
        v.requestLayout();

    }
    else {
        v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
        v.requestLayout();
    }
}

关键是要调用requestLayout方法,以便刷新您的布局。


我一直在尝试在适配器的getView方法中设置LayoutParams,以便所有ListView项目都设置为相同的高度。不幸的是,在执行此行时,我会收到空指针异常:AbsListView.LayoutParams listViewRow_params = (AbsListView.LayoutParams) convertView.getLayoutParams(); 有没有关于如何在getView中访问LayoutParams的建议? - PeteH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接