Android:listview 项目问题?

标签 android

您好,我创建了一个 ListView 和项目,该项目包含 2 个线性布局,我想在 上看到这些布局,具体取决于值,我尝试在适配器的 getview 中执行此操作,但它无法正常工作,我的代码如下所示
Item.xml

<LinearLayout android:id="@+id/LinearLayout00"
    android:layout_width="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:gravity="fill_horizontal"
    android:hapticFeedbackEnabled="true"
    android:layout_gravity="fill_horizontal"
    android:alwaysDrawnWithCache="true" android:background="#ccc"
    android:layout_height="wrap_content">
    <LinearLayout android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent" android:orientation="horizontal"
        android:gravity="fill_horizontal"
        android:hapticFeedbackEnabled="true"
        android:layout_gravity="fill_horizontal"
        android:alwaysDrawnWithCache="true" android:background="#ccc"
        android:layout_height="wrap_content">
        <ImageView android:id="@+id/image"
            android:layout_width="50dip" android:layout_height="50dip"
            android:src="@drawable/stub" android:scaleType="centerCrop"
            android:background="#000000" android:layout_margin="5dip" />
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_height="wrap_content"
            android:layout_gravity="fill_horizontal"
            android:layout_width="fill_parent" android:orientation="vertical"
            android:paddingLeft="5dip" android:paddingRight="5dip">
            <TextView android:id="@+id/text" android:text="Username"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1" android:layout_gravity="left|center_vertical"
                android:textColor="#111" />
            <TextView android:layout_height="wrap_content"
                android:id="@+id/Story" android:text="Story"
                android:layout_width="fill_parent" android:textColor="#111"
                android:textColorHighlight="#06f" android:textStyle="bold"
                android:typeface="sans" android:textSize="15dip" />
            <TextView android:layout_height="wrap_content"
                android:id="@+id/Time" android:text="12 hours ago"
                android:layout_width="fill_parent" android:textColor="#333"
                android:textSize="11dip" android:paddingBottom="5dip" />
            <TextView android:layout_height="wrap_content"
                android:id="@+id/Pid" android:visibility="gone"
                android:layout_width="fill_parent" android:textSize="0dip" />
        </LinearLayout>
    </LinearLayout>
    <LinearLayout android:id="@+id/LinearLayout02"
        android:layout_height="wrap_content"
        android:layout_gravity="fill_horizontal"
        android:layout_width="fill_parent" android:orientation="vertical"
        android:visibility="gone" android:paddingLeft="5dip"

        android:paddingRight="5dip">
        <TextView android:layout_height="wrap_content"
            android:id="@+id/follows" android:text="12 hours ago"
            android:layout_width="fill_parent" android:textColor="#333"
            android:textSize="11dip" android:paddingBottom="5dip" />
        <TextView android:layout_height="wrap_content"
            android:id="@+id/followData" android:text="Click"
            android:clickable="true" android:layout_width="fill_parent"
            android:textColor="#333" android:textSize="11dip"
            android:paddingBottom="5dip" />
    </LinearLayout>
</LinearLayout>

Java 文件

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

    View vi=convertView;
    ViewHolder holder;

    Post o=listItems1.get(position);

    if(convertView==null){

        vi = inflater.inflate(R.layout.item, null);
        holder=new ViewHolder();

        LinearLayout ly1=(LinearLayout)vi.findViewById(R.id.LinearLayout01);
        LinearLayout ly2=(LinearLayout)vi.findViewById(R.id.LinearLayout02);
        if(o.getPostType().equals("0"))
        {
            ly1.setVisibility(View.VISIBLE);
            ly2.setVisibility(View.GONE);
        }
        else
        {
            ly2.setVisibility(View.VISIBLE);
            ly1.setVisibility(View.GONE);
        }
        //ly.setVisibility(View.VISIBLE);

        holder.text=(TextView)vi.findViewById(R.id.text);
        holder.story=(TextView)vi.findViewById(R.id.Story);
        holder.timeSpan=(TextView)vi.findViewById(R.id.Time);
        holder.image=(ImageView)vi.findViewById(R.id.image);
        holder.pid=(TextView)vi.findViewById(R.id.Pid);

        holder.follows=(TextView)vi.findViewById(R.id.follows);
        holder.followsData=(TextView)vi.findViewById(R.id.followData);

        vi.setTag(holder);

    }
    else
        holder=(ViewHolder)vi.getTag();

    holder.text.setText(o.getUserName());
    holder.story.setText(Html.fromHtml(o.getStory()));
    holder.timeSpan.setText(o.getTime());
    holder.pid.setText(""+o.getPid());

    holder.image.setTag(listItemsUrl.get(position).toString());
    imageLoader.DisplayImage(listItemsUrl.get(position).toString(), activity, holder.image);

    return vi;

}

请帮帮我
关注奥古斯丁

最佳答案

无论 convertView 参数的值如何,您都需要设置这些 View 的可见性。
由于它是可回收的,因此可能(而且很可能确实)拥有与现在赋予它的值(value)不同的其他值(value)。

所以你应该删除部分

LinearLayout ly1=(LinearLayout)vi.findViewById(R.id.LinearLayout01);
LinearLayout ly2=(LinearLayout)vi.findViewById(R.id.LinearLayout02);
if(o.getPostType().equals("0"))
{
    ly1.setVisibility(View.VISIBLE);
    ly2.setVisibility(View.GONE);
}
else
{
    ly2.setVisibility(View.VISIBLE);
    ly1.setVisibility(View.GONE);
}

来自 if 子句,并放在它后面。

您还应该看看 Romain Guy's series about Android layout tricks ,看看您的布局如何减少 View 的浪费。

关于Android:listview 项目问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5866604/

相关文章:

java - 如何检索当前用户 ID 并将其放入 fragment 中

android - 从以前的 Android 应用程序版本向 SQLite 添加额外的列

android - 从 GCMIntentService 获取 Android 位置

java - 有多少用户可以处理 android 客户端,带套接字的 pc java 服务器?

android - Proguard 与 Roboguice

android - 总是创建延迟初始化的对象

使用 Retrofit/OkHttpClient 的 WiFi 上的 Android SocketTimeoutException

android - 从没有模型的单个字符串值格式化 JSON Body for Retrofit

java - 在较早的 Android 中显示本周的 7 个日期

java - Android DefaultHTTPClient 在 javascript 驱动的网站上通过 Post 请求填充表单