在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;

    }
}

我还想添加另外两个图像作为列表中底部两个文本项。现在,它只是一次又一次地为列表中的所有三行加载SAME图片。

乔el敏

让我逐步指导您。我们继续之前,你需要了解ArrayAdapter你的ListView填充与数据的每一行指定给它。换句话说,您希望将图像传递给适配器,就像处理JobsitesString数组一样。

  1. 定义一个simple wrapper object包含您的String(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阵列以供适配器使用。在您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列表在主活动中初始化适配器

    ListAdapter jobsiteAdapter = new CustomAdapter(this, objectList);
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章