java - 在 ListView 中加载多个图像

标签 java android listview android-studio-2.0

我正在学习 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();
                    }
                }
            }
        );

    }
}

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

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;

    }
}

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

最佳答案

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

  1. 定义一个简单包装器对象,其中包含您的字符串(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);
    

关于java - 在 ListView 中加载多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672395/

相关文章:

android - 需要帮助来实现 47degree Android-SwipeListView

Android 通用异步任务

android - 您可以在 Android Wear 的 GridViewPager 中使用 WatchViewStub 吗?

android - 从 Maven 导入远程库

java - 名称后菜单循环,Java

android - 移动设备上的列表上传应用程序

ListView 中的Android布局结构

java - 为什么 Vert.x 为 http 服务器创建一个新的事件循环?

java - 检查和非检查异常;是什么让他们与众不同?

java - 用于显示 ppt(power point 演示文稿)的 GWT 小部件