【问题标题】:Using two images in ListView Android在 ListView Android 中使用两个图像
【发布时间】:2019-01-17 13:31:56
【问题描述】:

我正在尝试使用 ArrayList 将两张图片放入 listView 中,但是当我运行项目时,只出现一张图片(卡车一张),但 没有出现星号 . Android Studio 没有显示任何错误。

有人可以看看我的代码并指出我,我做错了什么?

ListaDistribuidoresActivity.java

package com.pedido.meu.telas_meu_pedido;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class ListaDistribuidoresActivity extends AppCompatActivity {

    ItemAdapter adapter;
    ArrayList<Integer> idImages;
    ArrayList<String> nameList;
    ArrayList<Integer> starImage;

    int ids[]={R.mipmap.ic_distribuidor};
    String names[]={"DISTRIBUIDOR"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_distribuidores);
        ListView listViewDistribuidores = findViewById(R.id.txtListViewDistribuidores);

        idImages = new ArrayList<>();
        idImages = getList();
        starImage = new ArrayList<>();
        starImage = getListStar();
        nameList = new ArrayList<>();
        nameList = getNameList();
        ItemAdapter adapter = new ItemAdapter(ListaDistribuidoresActivity.this, idImages,nameList, starImage);
        listViewDistribuidores.setAdapter(adapter);
        listViewDistribuidores.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                Toast.makeText(ListaDistribuidoresActivity.this, "Distribuidor " + nameList.get(position) + "selecionado", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private ArrayList<Integer> getListStar()
    {
        starImage = new ArrayList<>();
        starImage.add(R.mipmap.ic_star_round);
        return  starImage;
    }

    private ArrayList<String> getNameList()
    {
        nameList = new ArrayList<>();
        nameList.add("DISTRIBUIDOR 1");
        nameList.add("DISTRIBUIDOR 2");
        nameList.add("DISTRIBUIDOR 3");
        nameList.add("DISTRIBUIDOR 4");
        return  nameList;
    }

    private ArrayList<Integer> getList()
    {
        idImages = new ArrayList<>();
        idImages.add(R.mipmap.ic_distribuidor);
        idImages.add(R.mipmap.ic_distribuidor);
        idImages.add(R.mipmap.ic_distribuidor);
        idImages.add(R.mipmap.ic_distribuidor);
        return idImages;
    }
}

ItemAdapter.java

package com.pedido.meu.telas_meu_pedido;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ItemAdapter extends BaseAdapter
{
    private Context context;
    private ArrayList<Integer> listaId;
    private ArrayList<String> listaNome;
    private ArrayList<Integer> listaStar;

    public ItemAdapter(Context context, ArrayList<Integer> listaId, ArrayList<String> listaNome, ArrayList<Integer> listaStar)
    {
        this.context = context;
        this.listaId = listaId;
        this.listaNome=listaNome;
        this.listaStar=listaStar;
    }

    public ItemAdapter(ListaProdutosActivity listaProdutosActivity, ArrayList<Integer> idImages, ArrayList<String> nameList)
    {
        this.context=listaProdutosActivity;
        this.listaId=idImages;
        this.listaNome=nameList;
    }

    @Override
    public int getCount()
    {
        return listaNome.size();
    }

    @Override
    public Object getItem(int position)
    {
        return listaNome.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

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

        if (convertView == null)
        {
            convertView = View.inflate(context, R.layout.list_item_produtos, null);
        }
        ImageView img = convertView.findViewById(R.id.imgListItemProduto);
        TextView tv =  convertView.findViewById(R.id.txtListItemProduto);
        img.setImageResource(listaId.get(position));
        tv.setText(listaNome.get(position));

        return convertView;
    }
}

Imagem.java

package com.pedido.meu.telas_meu_pedido;

public class Imagem
{
    private int imageId;
    private String imageName;

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getImageName() {
        return imageName;
    }

    public void setImageName(String imageName) {
        this.imageName = imageName;
    }
}

activity_lista_distribuidores.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.pedido.meu.telas_meu_pedido.ListaDistribuidoresActivity"
    >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_distribuidor"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txtTitleListaDistribuidores"
        android:gravity="center"
        android:textColor="@color/colorPrimary"
        android:textStyle="bold"
        android:textSize="14pt"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="20dp"
        />

    <ListView
        android:id="@+id/txtListViewDistribuidores"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>

</LinearLayout>

list_item_distribuidor.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <ImageView
        android:id="@+id/imgListaProdutos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@mipmap/ic_acai"
        android:layout_marginLeft="8dp"
        />

    <TextView
        android:id="@+id/txtDistribuidor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="@+id/imgListaProdutos"
        />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_star_round"
        android:layout_alignParentTop="@+id/imgListaProdutos"
        android:layout_marginLeft="30dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

【问题讨论】:

  • 你从来没有设置图片src?
  • 将您的相对布局高度设置为项目布局中的 warp_content ..是的,您没有设置第二张图片...
  • 我尝试使用此方法设置图像 private ArrayList getListStar() { starImage = new ArrayList(); starImage.add(R.mipmap.ic_star_round);返回星图; } 遵循与卡车图像相同的逻辑
  • 如何设置星图?

标签: android image listview android-listview


【解决方案1】:

将您的 list_item_distribuidor.xml 更新为以下一个

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <ImageView
        android:id="@+id/imgListaProdutos"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@mipmap/ic_acai"
        android:layout_marginLeft="8dp"
        />

    <TextView
        android:id="@+id/txtDistribuidor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="@+id/imgListaProdutos"
        />

    <ImageView android:id="@+id/imgListaStar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_star_round"
        android:layout_alignParentTop="@+id/imgListaProdutos"
        android:layout_marginLeft="30dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

还有你的 ItemAdapter.java 类和下面一个

package com.pedido.meu.telas_meu_pedido;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ItemAdapter extends BaseAdapter
{
    private Context context;
    private ArrayList<Integer> listaId;
    private ArrayList<String> listaNome;
    private ArrayList<Integer> listaStar;

    public ItemAdapter(Context context, ArrayList<Integer> listaId, ArrayList<String> listaNome, ArrayList<Integer> listaStar)
    {
        this.context = context;
        this.listaId = listaId;
        this.listaNome=listaNome;
        this.listaStar=listaStar;
    }

    public ItemAdapter(ListaProdutosActivity listaProdutosActivity, ArrayList<Integer> idImages, ArrayList<String> nameList)
    {
        this.context=listaProdutosActivity;
        this.listaId=idImages;
        this.listaNome=nameList;
    }

    @Override
    public int getCount()
    {
        return listaNome.size();
    }

    @Override
    public Object getItem(int position)
    {
        return listaNome.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

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

        if (convertView == null)
        {
            convertView = View.inflate(context, R.layout.list_item_produtos, null);
        }
        ImageView img = convertView.findViewById(R.id.imgListaProdutos);
        TextView tv =  convertView.findViewById(R.id.txtListItemProduto);
        ImageView imgStar = convertView.findViewById(R.id.imgListaStar);
        img.setImageResource(listaId.get(position));
        tv.setText(listaNome.get(position));
        imgStar.setImageResource(listaStar.get(0));
        return convertView;
    }
}

你没有设置图像, 让我知道它是否有效

【讨论】:

  • 成功了!我只是做了一些更多的调整,因为我不得不把这段代码 {TextView textDistribuidor = convertView.findViewById(R.id.txtDistribuidor);} {textDistribuidor.setText(listaNome.get(position));} 放在我的 ItemAdapter 类上,因为没有出现分销商名称。
  • 很高兴它有帮助
【解决方案2】:

使用这个库:

implementation 'com.squareup.picasso:picasso:2.5.2'

并在适配器中执行此操作:

ImageView img = convertView.findViewById(R.id.imgListItemProduto);
Picasso.with(context).load(listaId.get(position)).into(img);

【讨论】:

    【解决方案3】:

    您的 XML 和适配器存在问题。首先,将 id 添加到第二张图片的 XML 中,我想是星形图片。

    list_item_distribuidor.xml

     <ImageView
        android:id="@+id/imgListStars"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_star_round"
        android:layout_alignParentTop="@+id/imgListaProdutos"
        android:layout_marginLeft="30dp"
        />
    

    然后在 ItemAdapter.java 中通过它的 ID 对其进行初始化,并从列表中设置它的值。就像您对其他(卡车)图像所做的那样。

        ImageView imgStar = convertView.findViewById(R.id.imgListStars);
        imgStar.setImageResource(listaStar.get(position));
    

    【讨论】:

    • 现在星形图像出现了,但是当我在应用程序运行后尝试做其他事情时应用程序关闭。该应用程序运行正常,但如果我尝试做其他事情,它就会关闭。并在 com.pedido.meu.telas_meu_pedido.ItemAdapter.getView(ItemAdapter.java:72) 处的 java.util.ArrayList.get(ArrayList.java:437) 处给我这个错误
    • 您当前的查询已得到解答。请将我的帖子标记为正确答案@LauraRegina。附:请发布您的完整堆栈跟踪。
    【解决方案4】:

    完整的功能代码

    ListaDistribuidoresActivity.java

    package com.pedido.meu.telas_meu_pedido.controller;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Spinner;
    import android.widget.Toast;
    
    import com.pedido.meu.telas_meu_pedido.R;
    import com.pedido.meu.telas_meu_pedido.adapter.ItemAdapter;
    
    import java.util.ArrayList;
    
    public class ListaDistribuidoresActivity extends AppCompatActivity {
    
        ItemAdapter adapter;
        ArrayList<Integer> idImages;
        ArrayList<String> nameList;
        ArrayList<Integer> starImage;
    
        int ids[]={R.mipmap.ic_distribuidor};
        String names[]={"DISTRIBUIDOR"};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_lista_distribuidores);
            ListView listViewDistribuidores = findViewById(R.id.txtListViewDistribuidores);
            Spinner spinner = findViewById(R.id.spinnerCategoria);
    
            ArrayAdapter<CharSequence> adapterSpinner = ArrayAdapter.createFromResource(ListaDistribuidoresActivity.this, R.array.category_array, android.R.layout.simple_spinner_dropdown_item);
            adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapterSpinner);
    
            idImages = new ArrayList<>();
            idImages = getList();
            starImage = new ArrayList<>();
            starImage = getListStar();
            nameList = new ArrayList<>();
            nameList = getNameList();
    
            ItemAdapter adapter = new ItemAdapter(ListaDistribuidoresActivity.this, idImages,nameList, starImage);
            listViewDistribuidores.setAdapter(adapter);
            listViewDistribuidores.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    Toast.makeText(ListaDistribuidoresActivity.this, "Distribuidor " + nameList.get(position) + "selecionado", Toast.LENGTH_SHORT).show();
                }
            });
        }
    
        private ArrayList<Integer> getListStar()
        {
            starImage = new ArrayList<>();
            starImage.add(R.mipmap.ic_star_round);
            return  starImage;
        }
    
        private ArrayList<String> getNameList()
        {
            nameList = new ArrayList<>();
            nameList.add("DISTRIBUIDOR 1");
            nameList.add("DISTRIBUIDOR 2");
            nameList.add("DISTRIBUIDOR 3");
            nameList.add("DISTRIBUIDOR 4");
            return  nameList;
        }
    
        private ArrayList<Integer> getList()
        {
            idImages = new ArrayList<>();
            idImages.add(R.mipmap.ic_distribuidor);
            idImages.add(R.mipmap.ic_distribuidor);
            idImages.add(R.mipmap.ic_distribuidor);
            idImages.add(R.mipmap.ic_distribuidor);
            return idImages;
        }
    }
    

    Imagem.java

    package com.pedido.meu.telas_meu_pedido.modelo;
    
    public class Imagem
    {
        private int imageId;
        private String imageName;
    
        public int getImageId() {
            return imageId;
        }
    
        public void setImageId(int imageId) {
            this.imageId = imageId;
        }
    
        public String getImageName() {
            return imageName;
        }
    
        public void setImageName(String imageName) {
            this.imageName = imageName;
        }
    }
    

    ItemAdapter.java

    package com.pedido.meu.telas_meu_pedido.adapter;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.pedido.meu.telas_meu_pedido.controller.ListaProdutosActivity;
    import com.pedido.meu.telas_meu_pedido.R;
    
    import java.util.ArrayList;
    
    public class ItemAdapter extends BaseAdapter {
        private Context context;
        private ArrayList<Integer> listaId;
        private ArrayList<String> listaNome;
        private ArrayList<Integer> listaStar;
    
        public ItemAdapter(Context context, ArrayList<Integer> listaId, ArrayList<String> listaNome, ArrayList<Integer> listaStar) {
            this.context = context;
            this.listaId = listaId;
            this.listaNome = listaNome;
            this.listaStar = listaStar;
        }
    
        public ItemAdapter(ListaProdutosActivity listaProdutosActivity, ArrayList<Integer> idImages, ArrayList<String> nameList) {
            this.context = listaProdutosActivity;
            this.listaId = idImages;
            this.listaNome = nameList;
        }
    
        @Override
        public int getCount() {
            return listaNome.size();
        }
    
        @Override
        public Object getItem(int position) {
            return listaNome.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            int view = 0;
    
            if (convertView == null)
            {
                if(view == R.layout.list_item_produtos)
                {
                    convertView = View.inflate(context, R.layout.list_item_produtos, null);
                    ImageView imgProducts = convertView.findViewById(R.id.imgListItemProduto);
                    TextView textViewProducts = convertView.findViewById(R.id.txtListItemProduto);
                    imgProducts.setImageResource(listaId.get(position));
                    textViewProducts.setText(listaNome.get(position));
                }
                else
                {
                    convertView = View.inflate(context, R.layout.list_item_distribuidor, null);
                    ImageView imgDistributor = convertView.findViewById(R.id.imgStarDistributor);
                    TextView textDistribuidor = convertView.findViewById(R.id.txtDistribuidor);
                    imgDistributor.setImageResource(listaStar.get(0));
                    textDistribuidor.setText(listaNome.get(position));
                }
            }
            return convertView;
        }
    }
    

    activity_lista_distribuidores.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:layout_height="match_parent"
        android:layout_width="match_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.pedido.meu.telas_meu_pedido.controller.ListaDistribuidoresActivity"
        >
    
        <ImageView
            android:id="@+id/imgTitleListDistributor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@mipmap/ic_distribuidor"
            android:layout_gravity="center"
            android:layout_marginTop="30dp"
            android:contentDescription="@string/txtTitleListaDistribuidores"
            />
    
        <TextView
            android:id="@+id/txtTitleDistributor"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/txtTitleListaDistribuidores"
            android:gravity="center"
            android:textColor="@color/colorPrimary"
            android:textStyle="bold"
            android:textSize="14pt"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="20dp"
            />
    
        <Spinner
            android:id="@+id/spinnerCategoria"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="15dp"
            />
    
        <ListView
            android:id="@+id/txtListViewDistribuidores"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </ListView>
    
    </LinearLayout>
    

    list_item_distribuidor.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:android="http://schemas.android.com/apk/res/android"
        >
    
        <ImageView
            android:id="@+id/imgListaDistribuidor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:background="@mipmap/ic_distribuidor"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            />
    
        <TextView
            android:id="@+id/txtDistribuidor"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginStart="122dp"
            android:layout_marginLeft="122dp"
            android:layout_marginRight="-150dp"
            android:textStyle="bold"/>
    
        <ImageView
            android:id="@+id/imgStarDistributor"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:background="@mipmap/ic_star_round"
            android:layout_marginLeft="295dp"
            android:layout_marginTop="35dp"
            />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="4.2"
            android:layout_marginLeft="320dp"
            android:layout_marginTop="35dp"
            android:textStyle="bold"
            />
    
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多