如何在 android 中传递多个数组来填充列表视图?
How to pass more than one array to populate list view in android?
我想用图像和图像的上传时间填充 ListView。我已经完成了图像,但我不知道如何设置图像上传到 ListView 的时间。我该怎么做?
现在这是我拥有的:
MainActivity.java
ArrayList<String> pathArray;
Button pickImage;
Uri uri;
ListView l;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pathArray = new ArrayList<>();
pickImage = (Button) findViewById(R.id.buttonPick);
pickImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent pickup = new Intent();
pickup.setType("image/*");
pickup.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(pickup, "Select Image"), 5);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 5) {
try{
uri = data.getData();
pathArray.add(uri.toString());
l.setAdapter(new MyCustomAdapter(this, pathArray));
}
catch (NullPointerException ex){
ex.printStackTrace();
}
}
}
MyCustomAdapter.java
public class MyCustomAdapter extends BaseAdapter {
ArrayList<String> result;
Context context;
private static LayoutInflater inflater = null;
public MyCustomAdapter(MainActivity mainActivity, ArrayList<String> imageNameList) {
context = mainActivity;
result = imageNameList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return result.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder{
private TextView textViewTime;
ImageView listViewImage;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = inflater.inflate(R.layout.listview_layout, null);
holder.textViewTime = (TextView) convertView.findViewById(R.id.textTime);
holder.listViewImage = (ImageView) convertView.findViewById(R.id.listViewImage);
convertView.setTag(holder);
}
else{
holder = (Holder) convertView.getTag();
}
String path=result.get(position);
/* Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
int day = today.monthDay;
int month = today.month + 1;
int year = today.year; */
holder.listViewImage.setImageURI(Uri.parse(path));
return convertView;
}
}
请帮助我。
谢谢。
你应该把你的图片路径和上传时间包装成一个对象,比如ImageRow,把你的pathArray
改成List<ImageRow>
,当你上传图片成功后,把这个替换成onActivityResult()
:
uri = data.getData();
pathArray.add(uri.toString());
和
uri = data.getData();
pathArray.add(new ImageRow(uri.toString(),System.currentTimeMills()));
然后更改您的 MyCustomAdapter
class 以接收 List<ImageRow>
作为第二个参数并从中获取数据以设置图像视图和时间文本视图。
我想用图像和图像的上传时间填充 ListView。我已经完成了图像,但我不知道如何设置图像上传到 ListView 的时间。我该怎么做?
现在这是我拥有的:
MainActivity.java
ArrayList<String> pathArray;
Button pickImage;
Uri uri;
ListView l;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pathArray = new ArrayList<>();
pickImage = (Button) findViewById(R.id.buttonPick);
pickImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent pickup = new Intent();
pickup.setType("image/*");
pickup.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(pickup, "Select Image"), 5);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 5) {
try{
uri = data.getData();
pathArray.add(uri.toString());
l.setAdapter(new MyCustomAdapter(this, pathArray));
}
catch (NullPointerException ex){
ex.printStackTrace();
}
}
}
MyCustomAdapter.java
public class MyCustomAdapter extends BaseAdapter {
ArrayList<String> result;
Context context;
private static LayoutInflater inflater = null;
public MyCustomAdapter(MainActivity mainActivity, ArrayList<String> imageNameList) {
context = mainActivity;
result = imageNameList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return result.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public class Holder{
private TextView textViewTime;
ImageView listViewImage;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = inflater.inflate(R.layout.listview_layout, null);
holder.textViewTime = (TextView) convertView.findViewById(R.id.textTime);
holder.listViewImage = (ImageView) convertView.findViewById(R.id.listViewImage);
convertView.setTag(holder);
}
else{
holder = (Holder) convertView.getTag();
}
String path=result.get(position);
/* Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
int day = today.monthDay;
int month = today.month + 1;
int year = today.year; */
holder.listViewImage.setImageURI(Uri.parse(path));
return convertView;
}
}
请帮助我。
谢谢。
你应该把你的图片路径和上传时间包装成一个对象,比如ImageRow,把你的pathArray
改成List<ImageRow>
,当你上传图片成功后,把这个替换成onActivityResult()
:
uri = data.getData();
pathArray.add(uri.toString());
和
uri = data.getData();
pathArray.add(new ImageRow(uri.toString(),System.currentTimeMills()));
然后更改您的 MyCustomAdapter
class 以接收 List<ImageRow>
作为第二个参数并从中获取数据以设置图像视图和时间文本视图。