【问题标题】:Android custom layout listview with images带有图像的 Android 自定义布局列表视图
【发布时间】:2013-07-31 23:27:16
【问题描述】:

我想设法获得一个包含动态项目的列表视图。 我构建了一个包含 ImageView 和 2 个 TextViews 的 row_layout。 当我构建适配器时,我希望能够根据行号显示或不显示 ImageView。 所以我想在第 2 行有 img1,在第 3 行有 img2,然后在第 5 行有 img3。在所有其他行上,我不希望显示任何 imageView(而且 textviews 的对齐方式必须改变填充由ImageView 丢失)。

这可能吗?

我在这里填充我的适配器:

JSONObject json_data;
try {
   int length = lststat.length();
   detalii_client = new Client[length];
   for (int i = 0; i < length; i++) {
     json_data = lststat.getJSONObject(i);
     detalii_client[i] = new Client();
     String categoria = json_data.getString("den");
     if ("1".equals(categoria)){ // row 1
        detalii_client[i].desc ="Some Title";
        detalii_client[i].icon = 0; // here I want NO IMAGE
     }
     if ("2".equals(categoria)){ // row 2
        detalii_client[i].desc ="Some other Title";
        detalii_client[i].icon = 0; // here I want to assign a picture to the imageView
     }
....

我有一堂课:

public class Client {
    public int icon;
            public String desc;
            public String title;
            public String id;
            public Client(){
                super();
            }

            public Client(int icon, String desc, String title, String id) {
                super();
                this.icon = icon;
                this.desc = desc;
                this.id = id;
                this.title= title;
            }
    }

还有一个自定义的适配器类

public class ClientAdapter extends ArrayAdapter<Client>{

    Context context;
    int layoutResourceId;   
    Client data[] = null;

    public ClientAdapter(Context context, int layoutResourceId, Client[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ClientHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ClientHolder();
            holder.hldIcon = (ImageView)row.findViewById(R.id.imgIconx);
            holder.hldTitle = (TextView)row.findViewById(R.id.txtTitlu);
            holder.hldDesc = (TextView)row.findViewById(R.id.txtDescr);
            holder.hldId = (TextView)row.findViewById(R.id.txtId);
            row.setTag(holder);
        }
        else
        {
            holder = (ClientHolder)row.getTag();
        }

        Client clientul = data[position];
        holder.hldTitle.setText(clientul.title);
        holder.hldDesc.setText(clientul.desc);
        holder.hldId.setText(clientul.id);
        holder.hldIcon.setImageResource(clientul.icon);

        return row;
    }

    static class ClientHolder
    {
        ImageView hldIcon;
        TextView hldTitle;
        TextView hldId;
        TextView hldDesc;
    }    
}   

我还有一个活动布局(无关)一个列表视图和一个底部按钮(relativeLayout)。 我有一个 row_layout 用于显示行。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/imgIconx"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/client64" />

        <LinearLayout
            android:layout_width="145dp"
            android:layout_height="match_parent"
            android:layout_weight="1.50"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/txtDescr"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:text="@string/lbl_loc"
                android:textColor="@color/darkred"
                android:textSize="@dimen/descriere_detaliu"
                android:typeface="serif" />

            <TextView
                android:id="@+id/txtTitlu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/lbl_client"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@color/darkred"
                android:textSize="18sp"
                android:textStyle="normal"
                android:typeface="serif" />

            <TextView
                android:id="@+id/txtId"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/lbl_idviz"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="@color/white" />
        </LinearLayout>

</RelativeLayout>
  • 在哪里可以将图片分配给 ImageView?
  • 我怎样才能让某些行的 ImageView “消失”?

谢谢

【问题讨论】:

    标签: android android-listview android-imageview


    【解决方案1】:

    在哪里可以将我的图片分配给我的 ImageView?

    AdaptergetView() 方法中执行此操作。看起来你现在正在这样做。

    我怎样才能让某些行的 ImageView “消失”?

    使用if 语句和if 它不是正确的行 (position) 调用

    holder.hldIcon.setVisibility(View.INVISIBLE)`
    

    holder.hldIcon.setVisibility(View.GONE)
    

    取决于你想要什么

    【讨论】:

    • 1.如果我设置可见性......那么图像不会显示,但该行保持对齐,就像其余的行一样。我的意思是 TextViews 看起来像在有 Image 的行中
    • 如果你把它改成invisible,它仍然会占用同样的空间。如果你使用gone,那么它将被删除,空间将被另一个Views使用
    • 2.我阅读了 getview 并尝试在我的代码中执行此操作,但我不知道如何将不同的图像分配给不同的行。我添加到资产文件夹,一个图像文件夹,我在其中添加了 3-4 张图片 (png)。但是如何将图片分配给 ImageView?
    • 您对 View.GONE 的看法是正确的。它完全符合我的需要。问题仍然存在于从资产文件夹加载图像......你能帮忙吗?
    • 我的意思是...我在上面的代码中添加了以下内容:switch (position){ case 0:holder.hldIcon.setVisibility(View.GONE); case 1:{ int resID = context.getResources().getIdentifier("gmaps64", "drawable", context.getPackageName()); iw.setImageResource(resID); }} 我在 res/drawable-mdpi 文件夹中有一个名为 gmaps64.png 的 png 文件,但没有渲染图像。甚至更多......即使我没有调用它,它看起来也像第 1 行的 View.GONE 。我做错了什么?
    猜你喜欢
    • 2013-11-06
    • 2011-07-28
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多