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

标签 android android-layout android-listview android-arrayadapter

我正在处理新闻项目列表。我的列表是一个扩展 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 的初学者提供一些启示吗?

最佳答案

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

我正在使用 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;
    }
} 

我的主要 Activity 扩展了 ListActivity,其中列表的项目是从异步任务中的一些 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 方法,以便刷新您的布局。

关于android - 如何在填充列表后以编程方式更改列表元素的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796263/

相关文章:

android - 在 ListView 中分别设置各行的背景颜色

android - 如何使用 cursorloader 在 android 中读取 SQLite DB?

android - HttpResponseCache 的 Gridview 性能

android - 在 Android 中禁用轨迹球点击

Android 类转换异常 : android. view.ViewGroup$LayoutParams 无法转换为 android.widget.RelativeLayout$LayoutParams

android - 无法单击 ListView 项目,无法调用任何其他监听器

java - 使用AsyncTask在ListView中显示数据,但没有调用onPostExecute

java - 寻找允许修改源代码的 java (Android) 面向方面的框架

android - 如何在 Xamarin 的 visual studio 中定位 jdk?

java - 平移动画会导致 View 的填充位置发生变化,但不会导致布局发生变化