在 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 由于图像的缘故实施基础适配器
让我逐步指导您完成此过程。在我们继续之前,您需要了解 ListView
的 ArrayAdapter
会使用您指定的数据填充每一行。换句话说,您希望像处理 Jobsites
字符串数组一样将图像传递给适配器。
定义一个 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;
}
}
初始化适配器要使用的 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....
现在,将 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;
}
}
现在确保使用新的 SimpleObject
列表初始化主 activity 中的适配器:
ListAdapter jobsiteAdapter = new CustomAdapter(this, objectList);
我正在学习 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 由于图像的缘故实施基础适配器
让我逐步指导您完成此过程。在我们继续之前,您需要了解 ListView
的 ArrayAdapter
会使用您指定的数据填充每一行。换句话说,您希望像处理 Jobsites
字符串数组一样将图像传递给适配器。
定义一个
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; } }
初始化适配器要使用的
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....
现在,将
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; } }
现在确保使用新的
SimpleObject
列表初始化主 activity 中的适配器:ListAdapter jobsiteAdapter = new CustomAdapter(this, objectList);