如何添加一个ListView具有图像和动态文本? [英] How do I add a ListView with image and text dynamically?
问题描述
我试图返回的拍摄的图像
和文本
从活动B 以< STRONG>活动A 的ListView
。我按照这个<一个href=\"http://www.androidinterview.com/android-custom-listview-with-image-and-text-using-arrayadapter/\"相对=nofollow>教程1 和<一个href=\"http://geekswithblogs.net/bosuch/archive/2012/02/24/android-tutorialndashadding-images-to-your-custom-multi-line-listview.aspx\"相对=nofollow>教程2 ,但遗憾的是,名单人数是固定的。 我得到stucked上,因为我想添加列表视图动态地而不是固定的某个部分。有人能帮助我吗?谢谢
活动B (返回文本和图像A)
私人无效activeTakePhoto(){//打开摄像头
意图takePictureIntent =新意图(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);
}
@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,
意图数据){
super.onActivityResult(要求code,结果code,数据);
开关(要求code){
案例RESULT_LOAD_IMAGE:
如果(要求code == RESULT_LOAD_IMAGE&放大器;&安培;
结果code == RESULT_OK&放大器;&安培;空!=数据){
...... //从画廊selecte
}
案例REQUEST_IMAGE_CAPTURE:
。位图的缩略图=(位图)data.getExtras()获得(数据);
ByteArrayOutputStream字节=新ByteArrayOutputStream();
thumbnail.com preSS(Bitmap.Com pressFormat.JPEG,90字节); //生成随机文件名
字符串文件名=tempimg.jpg; 尝试{
。照片=(位图)data.getExtras()获得(数据);
imageView.setImageBitmap(照片); //图片可以在这里显示
}赶上(例外五){
e.printStackTrace();
}
}
} submit.setOnClickListener(新View.OnClickListener(){//返回图像和文本到
@覆盖
公共无效的onClick(视图v){
意图returnIntent =新的Intent();
。金额= Amount.getText()的toString();
returnIntent.putExtra(量,量);
returnIntent.putExtra(照片,照片);
的setResult(Activity.RESULT_OK,returnIntent);
完();
}
});
活动A
@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){//从活动B接收和填充的ListView一
如果(结果code == RESULT_OK){
如果(要求code == PROJECT_REQUEST_ code){
ReceiveAmount = data.getStringExtra(额);
ReceiveImage = data.getStringExtra(照片); 如果(mClickedPosition == -1){//如果点击图标
如果(OBJ!= NULL)
obj.addNewItem(ReceiveAmount,ReceiveImage); }其他{
如果(OBJ!= NULL)
obj.changeItem(mClickedPosition,ReceiveAmount,ReceiveImage); }
}
}
}
PicCustomBaseAdapter (OBJ)
公共无效addNewItem(字符串量,位图imageFromClaims)
{
ImageAndText形象=新ImageAndText();
image.setAmount(金额+量);
image.setImage(imageFromClaims);
imgAndText.add(图片);
这个。 notifyDataSetChanged();
addOrRemoveFooter();
} 公共无效changeItem(INT男,字符串量,位图imageFromClaims)
{
ImageAndText形象=新ImageAndText();
image.setAmount(金额+量);
image.setImage(imageFromClaims);
imgAndText.set(图片);
这个。 notifyDataSetChanged();
}
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ViewHolder持有人;
如果(convertView == NULL){
convertView = mInflater.inflate(R.layout.custom_image_and_text,NULL);
持有人=新ViewHolder();
holder.txtAmount =(TextView中)convertView.findViewById(R.id.ListAmount);
holder.picture =(ImageView的)convertView.findViewById(R.id.photo);
convertView.setTag(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
}
holder.txtAmount.setText(imgAndText.get(位置).getAmount());
holder.picture.setImageResource(imgid [imgAndText.get(位置).getImageNumber() - 1]); 返回convertView;
} 静态类ViewHolder {
TextView的txtAmount;
ImageView的图片;
}
}
最后 ImageAndText
私有String金额=;
位图图像;
公共位图的getImage(){
返回形象;
} 公共无效setImage(位图图像){
this.image =图像;
}
公共无效setAmount(字符串量){
this.amount =金额;
} 公共字符串getAmount(){
返回金额;
}
我的问题:
1.ReceiveImage在活动的onActivityResult一个错误的第二个参数类型
2.在PicCustomBaseAdapter,公众视野中得到视图,应该怎么把imgid`holder.picture.setImageResource(imgid [imgAndText.get(位置).getImageNumber() - 1]);`因为图像动态添加?
3. imgAndText.set(图片);在PicCustomBaseAdapter,changeItem()错误
我最近做了这个节目。它包括的ListView使用图像和文本跳它有助于
MainActivity.java
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ArrayAdapter;
进口android.widget.ListAdapter;
进口android.widget.ListView;
进口android.widget.Toast; 公共类MainActivity扩展AppCompatActivity { @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); 的String [] = favouriteTvShows {灵指神探,更好泰德
双峰,怪胎们,赵氏孤儿黑,行尸走肉
绝命毒师,400,阿尔法,火星上的生命}; ListAdapter theAdapter =新myAdapter(这一点,favouriteTvShows); ListView控件的ListView =(ListView控件)findViewById(R.id.listView); listView.setAdapter(theAdapter); listView.setOnItemClickListener(新AdapterView.OnItemClickListener(){
@覆盖
公共无效onItemClick(适配器视图&LT;&GT;适配器视图,视图观点,INT位置,长的id){ 字符串tvShowPicked =您的选择+将String.valueOf(adapterView.getItemAtPosition(位置)); Toast.makeText(MainActivity.this,tvShowPicked,Toast.LENGTH_LONG).show(); }
});
} }
myAdapter.java
类myAdapter扩展ArrayAdapter&LT;串GT; { 公共myAdapter(上下文的背景下,的String []值){
超(背景下,R.layout.row_layout_2,价值观);
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){ LayoutInflater充气= LayoutInflater.from(的getContext()); 查看theView = inflater.inflate(R.layout.row_layout_2,父母,假); 字符串tvShows =的getItem(位置); TextView中的TextView =(TextView中)theView.findViewById(R.id.textView1); textView.setText(tvShows); ImageView的ImageView的=(ImageView的)theView.findViewById(R.id.imageView1); imageView.setImageResource(R.drawable.imgg); 返回theView;
}
}
activity_main.xml中
&LT; LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools的android:layout_width =match_parent
机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
机器人:方向=垂直
机器人:paddingBottom会=@扪/ activity_vertical_margin工具:上下文=MainActivity。&GT; &LT; ListView控件
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:ID =@ + ID /的ListView
机器人:layout_centerVertical =真
机器人:layout_alignParentRight =真
机器人:layout_alignParentEnd =真/&GT; &LT; / LinearLayout中&GT;
row_layout.xml
&LT; LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools的android:layout_width =match_parent
机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
机器人:方向=垂直
机器人:paddingBottom会=@扪/ activity_vertical_margin工具:上下文=MainActivity。&GT; &LT;的TextView
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:ID =@ + ID / textView1
机器人:TEXTSIZE =30sp
机器人:文字样式=大胆
机器人:填充=15dp/&GT; &LT; / LinearLayout中&GT;
row_layout_2.xml
&LT; LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools的android:layout_width =match_parent
机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
机器人:方向=横向
机器人:paddingBottom会=@扪/ activity_vertical_margin工具:上下文=MainActivity。&GT; &LT; ImageView的
机器人:layout_width =25dp
机器人:layout_height =25dp
机器人:layout_marginLeft =10dp
机器人:layout_marginTop =25dp
机器人:SRC =@绘制/ imgg
机器人:ID =@ + ID / imageView1/&GT;
&LT;的TextView
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:ID =@ + ID / textView1
机器人:TEXTSIZE =30sp
机器人:文字样式=大胆
机器人:填充=15dp/&GT; &LT; / LinearLayout中&GT;
I trying to return the captured image
and text
from Activity B to Activity A listView
. I follow this tutorial 1 and tutorial 2, but sadly, the list number was fixed. I get stucked on some part since I wanted to add the listView dynamically but not fixed. Can someone help me ? Thanks
Activity B (return text and image to 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();
}
});
Activity 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;
}
}
Finally 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;
}
My problem :
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
I recently made this program. It include ListView with Image and Text hop it helps
MainActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] favouriteTvShows = {"Pushing Daisies", "Better Off Ted",
"Twin Peaks", "Freaks and Geeks", "Orphan Black", "Walking Dead",
"Breaking Bad", "The 400", "Alphas", "Life on Mars"};
ListAdapter theAdapter = new myAdapter(this, favouriteTvShows);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(theAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String tvShowPicked = "You Selected " + String.valueOf(adapterView.getItemAtPosition(position));
Toast.makeText(MainActivity.this, tvShowPicked, Toast.LENGTH_LONG).show();
}
});
}
}
myAdapter.java
class myAdapter extends ArrayAdapter<String>{
public myAdapter(Context context, String[] values) {
super(context, R.layout.row_layout_2, values);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View theView = inflater.inflate(R.layout.row_layout_2, parent, false);
String tvShows = getItem(position);
TextView textView = (TextView) theView.findViewById(R.id.textView1);
textView.setText(tvShows);
ImageView imageView = (ImageView) theView.findViewById(R.id.imageView1);
imageView.setImageResource(R.drawable.imgg);
return theView;
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</LinearLayout>
row_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView1"
android:textSize="30sp"
android:textStyle="bold"
android:padding="15dp"/>
</LinearLayout>
row_layout_2.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="25dp"
android:src="@drawable/imgg"
android:id="@+id/imageView1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView1"
android:textSize="30sp"
android:textStyle="bold"
android:padding="15dp"/>
</LinearLayout>
这篇关于如何添加一个ListView具有图像和动态文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!