在 ListView 中加载多个图像

Load Multiple Images in ListView

我正在学习 NewBoston 教程 (https://www.youtube.com/watch?v=nOdSARCVYic&list=PL6gx4Cwl9DGBsvRxJJOzG4r4k_zLKrnxl&index=48)

他展示了如何将图像放入列表中,但他从未展示过如何为每段文本分配不同的图像。

这是我的 MainActivity.

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String[] Jobsites = {"River Park Place", "Mayfair", "Jameson House"};
    ListAdapter jobsiteAdapter = new CustomAdapter(this, Jobsites);
    ListView jobsiteListView = (ListView) findViewById(R.id.jobsiteListView);
    jobsiteListView.setAdapter(jobsiteAdapter);

    jobsiteListView.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String jobsite = String.valueOf(parent.getItemAtPosition(position));
                    //Toast.makeText(MainActivity.this, jobsite, Toast.LENGTH_LONG).show();
                    if (jobsite == "River Park Place"){
                        //Perform segue to the proper view where employess can sign in
                        //******************************************
                        System.out.println("*****************");
                        System.out.println("Attempting to segue");
                        System.out.println("*****************");



                        //******************************************
                    }else{
                        System.out.println("*****************");
                        System.out.println("These jobsites aren't avaliable yet!");
                        System.out.println("*****************");
                        Toast.makeText(MainActivity.this, "**These Sites aren't avaliable yet!**", Toast.LENGTH_LONG).show();
                    }
                }
            }
        );

    }
}

在视频中,我们制作了一个处理图像的自定义视图。这是代码。

class CustomAdapter extends ArrayAdapter<String> {


public CustomAdapter(Context context, String[] jobsites) {
    super(context,R.layout.custom_row ,jobsites);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater jobsiteInflater = LayoutInflater.from(getContext());
    View customView = jobsiteInflater.inflate(R.layout.custom_row, parent, false);

    String singleJobsiteItem = getItem(position);

    ImageView josbiteImage = (ImageView) customView.findViewById(R.id.josbiteImage);

    josbiteImage.setImageResource(R.drawable.riverparkplace);


    return customView;

    }
}

我还有另外两张图片要添加到列表底部的两项文本中。现在它只是为列表中的所有三行一遍又一遍地加载相同的图片。

You need to 由于图像的缘故实施基础适配器

让我逐步指导您完成此过程。在我们继续之前,您需要了解 ListViewArrayAdapter 会使用您指定的数据填充每一行。换句话说,您希望像处理 Jobsites 字符串数组一样将图像传递给适配器。

  1. 定义一个 simple wrapper object,其中包含您的字符串 (Jobsites) 和您要分配给它的 图像

    public class SimpleObject {
    
        private String jobSite;
        private int imageID; // your R.drawable.image
    
        public SimpleObject(String jobSite, int imageID) {
            this.jobSite = jobSite;
            this.imageID = imageID;
        }
    
        public String getJobSite() {
            return jobSite;
        }
    
        public int getImageID() {
            return imageID;
        }
    }
    
  2. 初始化适配器要使用的 SimpleObject 数组。在主 activity 的 onCreate() 中,执​​行以下操作:

    ArrayList<SimpleObject> objectList = new ArrayList<>();
    objectList.add(new SimpleObject("River Park Place", R.drawable.image1);
    objectList.add(new SimpleObject("Mayfair", R.drawable.image2);
    // the list goes on....
    
  3. 现在,将 CustomAdapter 更改为按住 SimpleObject 而不是 String:

    class CustomAdapter extends ArrayAdapter<SimpleObject> {
    
    
        public CustomAdapter(Context context, ArrayList<SimpleObject> objectList) {
            super(context,R.layout.custom_row ,objectList);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater jobsiteInflater = LayoutInflater.from(getContext());
            View customView = jobsiteInflater.inflate(R.layout.custom_row, parent, false);
    
            // Get the SimpleObject
            SimpleObject item = (SimpleObject) getItem(position);
            String singleJobsiteItem = item.getJobSite(); // get the String
    
            ImageView josbiteImage = (ImageView) customView.findViewById(R.id.josbiteImage);
    
            josbiteImage.setImageResource(item.getImageID()); // get the image ID and assign it to jobsiteImage :)
    
    
            return customView;
    
        }
    }
    
  4. 现在确保使用新的 SimpleObject 列表初始化主 activity 中的适配器:

    ListAdapter jobsiteAdapter = new CustomAdapter(this, objectList);