如何添加一个ListView具有图像和动态文本? [英] How do I add a ListView with image and text dynamically?

查看:260
本文介绍了如何添加一个ListView具有图像和动态文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图返回的拍摄的图像文本活动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_IM​​AGE_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:机器人=htt​​p://schemas.android.com/apk/res/android
  的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
  机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
  机器人:paddingRight =@扪/ activity_horizo​​ntal_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:机器人=htt​​p://schemas.android.com/apk/res/android
      的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
      机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
      机器人:paddingRight =@扪/ activity_horizo​​ntal_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:机器人=htt​​p://schemas.android.com/apk/res/android
      的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
      机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
      机器人:paddingRight =@扪/ activity_horizo​​ntal_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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆