【问题标题】:How do I add a ListView with image and text dynamically?如何动态添加带有图像和文本的 ListView?
【发布时间】:2015-12-09 16:52:12
【问题描述】:

我试图将 captured imagetextActivity B 返回到 Activity A listView。我关注这个tutorial 1tutorial 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


【解决方案1】:

我最近制作了这个程序。它包括 ListView 与 Image 和 Text hop 它有帮助

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中添加图片和文字的方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 2021-04-23
相关资源
最近更新 更多