Android:listview项目问题?

时间:2011-05-03 07:47:56

标签: android

您好我创建了一个列表视图和项目,该项目包含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;

}

请帮帮我
关注奥古斯丁

1 个答案:

答案 0 :(得分:2)

无论convertView参数的值如何,您都需要设置这些视图的可见性。
由于它被回收利用,可能(并且很可能确实)拥有其他价值,而不是现在给予的价值。

所以你应该删除部分

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,了解您的布局如何减少浪费视图。