【发布时间】:2015-12-09 16:52:12
【问题描述】:
我试图将 captured image 和 text 从 Activity B 返回到 Activity A listView。我关注这个tutorial 1 和tutorial 2,但遗憾的是,列表编号是固定的。 由于我想动态添加 listView 但不固定,所以我在某些方面遇到了困难。有人可以帮我吗?谢谢
活动 B(将文本和图像返回给 A)
private void activeTakePhoto() { // open camera
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE &&
resultCode == RESULT_OK && null != data) {
......// selecte from gallery
}
case REQUEST_IMAGE_CAPTURE:
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
//to generate random file name
String fileName = "tempimg.jpg";
try {
photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo); // image can shown here
} catch (Exception e) {
e.printStackTrace();
}
}
}
submit.setOnClickListener(new View.OnClickListener() { // return image and text to A
@Override
public void onClick(View v) {
Intent returnIntent=new Intent();
amount=Amount.getText().toString();
returnIntent.putExtra("amount", amount);
returnIntent.putExtra("photo",photo);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
活动 A
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Activity B and populate ListView A
if (resultCode == RESULT_OK) {
if (requestCode == PROJECT_REQUEST_CODE) {
ReceiveAmount = data.getStringExtra("amount");
ReceiveImage=data.getStringExtra("photo");
if (mClickedPosition == -1) { // if icon clicked
if (obj != null)
obj.addNewItem( ReceiveAmount,ReceiveImage);
} else {
if (obj != null)
obj.changeItem(mClickedPosition,ReceiveAmount, ReceiveImage);
}
}
}
}
PicCustomBaseAdapter(obj)
public void addNewItem(String amount, Bitmap imageFromClaims)
{
ImageAndText image = new ImageAndText();
image.setAmount(" Amount : " + amount);
image.setImage(imageFromClaims);
imgAndText.add(image);
this. notifyDataSetChanged();
addOrRemoveFooter();
}
public void changeItem(int m,String amount, Bitmap imageFromClaims)
{
ImageAndText image = new ImageAndText();
image.setAmount(" Amount : " + amount);
image.setImage(imageFromClaims);
imgAndText.set(image);
this. notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_image_and_text, null);
holder = new ViewHolder();
holder.txtAmount = (TextView) convertView.findViewById(R.id.ListAmount);
holder.picture=(ImageView)convertView.findViewById(R.id.photo);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtAmount.setText(imgAndText.get(position).getAmount());
holder.picture.setImageResource(imgid[imgAndText.get(position).getImageNumber() - 1]);
return convertView;
}
static class ViewHolder {
TextView txtAmount;
ImageView picture;
}
}
终于ImageAndText
private String amount = "";
Bitmap image;
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getAmount() {
return amount;
}
我的问题:
1.ReceiveImage in onActivityResult Activity A wrong 2nd Argument Type
2. In PicCustomBaseAdapter, public view get view , how should I put imgid `holder.picture.setImageResource(imgid[imgAndText.get(position).getImageNumber() - 1]);` since image is added dynamically ?
3. imgAndText.set(image); in PicCustomBaseAdapter, changeItem() error
【问题讨论】:
-
你会添加你的 logcat 输出吗?
-
@JordanSeanor 我还没有运行我的应用程序,但是您可以看到 我的问题,正如我在帖子中所说的那样。谢谢
-
@JordanSeanor 你知道如何解决我的第一个问题吗?
-
但过去,下面给出的答案正是您所需要的。你也可以动态地做列表。
-
您的代码再次不一致。在
getView()方法中,您使用getImageNumber()未在ImageAndText类中显示的方法。我假设这是一个资源 ID。您需要与该类中处理图像的方式保持一致。我会更改ImageAndText以删除对资源 ID 的任何使用;即让它只保留一个位图。创建初始数据列表时,从资源加载位图,并将其传递给ImageAndText对象,而不是 ID。然后将getView()行更改为:holder.picture.setImageBitmap(imgAndText.get(position).getImage());。
标签: android image listview android-listview