【问题标题】:How to set Title of images based on image select in android如何在android中根据图像选择设置图像标题
【发布时间】:2018-02-17 03:27:41
【问题描述】:

我正在开发一个 android 应用程序,我正在尝试为 Image Gallary 实现一项功能。现在,最初,我想显示一些带有标题名称的图像 url。我正在使用 hashmap 将标题与他们的图像进行映射。我的模型类具有两个 String 字段 url 和标题。但问题是我是开发领域的新手,现在确定如何根据图像点击显示标题。这是我的模型类

public class ImageModel implements Parcelable {

String name, url;

public ImageModel() {

}

protected ImageModel(Parcel in) {
    name = in.readString();
    url = in.readString();
}

public static final Creator<ImageModel> CREATOR = new Creator<ImageModel>() {
    @Override
    public ImageModel createFromParcel(Parcel in) {
        return new ImageModel(in);
    }

    @Override
    public ImageModel[] newArray(int size) {
        return new ImageModel[size];
    }
};

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);
    dest.writeString(url);
  }
}

现在是我创建带有图像和标题的 Hashmap 以将它们显示到视图中的主要活动。

public class MainActivity extends AppCompatActivity {

GalleryAdapter mAdapter;
RecyclerView mRecyclerView;

ArrayList<ImageModel> data = new ArrayList<>();

ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
HashMap<String, String> h1 = new HashMap<>();

String[] imgUrls = {"https://images.unsplash.com/photo-1444090542259-0af8fa96557e?q=80&fm=jpg&w=1080&fit=max&s=4b703b77b42e067f949d14581f35019b",
        "https://images.unsplash.com/photo-1439546743462-802cabef8e97?dpr=2&fit=crop&fm=jpg&h=725&q=50&w=1300",
        "https://images.unsplash.com/photo-1441155472722-d17942a2b76a?q=80&fm=jpg&w=1080&fit=max&s=80cb5dbcf01265bb81c5e8380e4f5cc1"};
String[] imgNames = {"name1","name2","name3"};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    for (int i = 0; i < 3; i++) { //change size according to your size.

        ImageModel imageModel = new ImageModel();
        imageModel.setName(imgNames[i]);
        imageModel.setUrl(imgUrls[i]);
        data.add(imageModel);

    }

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mRecyclerView = (RecyclerView) findViewById(R.id.list);
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
    mRecyclerView.setHasFixedSize(true);


    mAdapter = new GalleryAdapter(MainActivity.this, data);
    mRecyclerView.setAdapter(mAdapter);

    mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this,
            new RecyclerItemClickListener.OnItemClickListener() {

                @Override
                public void onItemClick(View view, int position) {

                    Intent intent = new Intent(MainActivity.this, DetailActivity.class);
                    intent.putParcelableArrayListExtra("data", data);
                    intent.putExtra("pos", position);
                    startActivity(intent);

                }
            }));

}

}

GalleryAdapterCode

public class GalleryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

Context context;
List<ImageModel> data = new ArrayList<>();

public GalleryAdapter(Context context, List<ImageModel> data) {
    this.context = context;
    this.data = data;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder;
    View v;
        v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.list_item, parent, false);
        viewHolder = new MyItemHolder(v);

    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        Glide.with(context).load(data.get(position).getUrl())
                .thumbnail(0.5f)
                .override(200,200)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(((MyItemHolder) holder).mImg);
        ((MyItemHolder) holder).mTextView.setText(data.get(position).getName());

}

@Override
public int getItemCount() {
    return data.size();
}

public static class MyItemHolder extends RecyclerView.ViewHolder {
    ImageView mImg;
    TextView mTextView;


    public MyItemHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.textView);
        mImg = (ImageView) itemView.findViewById(R.id.item_img);
    }

}

}

我的项目列表行的 XML 类是

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1">

    <ImageView
        android:id="@+id/item_img"
        android:layout_width="match_parent"
        android:layout_height="188dp"
        android:adjustViewBounds="true"
        android:background="@color/colorAccent"
        android:contentDescription="@string/app_name"
        android:scaleType="centerCrop"
        android:src="@drawable/placeholder" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#7000"
        android:orientation="vertical"
        android:padding="10dp"
        android:layout_alignBottom="@+id/item_img"
        android:layout_alignParentStart="true">
            <TextView
                android:id="@+id/textView"
                android:text="Headline"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="#FFF"
                android:textSize="15dp"
                android:textStyle="normal|bold"
                />
    </LinearLayout>
</RelativeLayout>

【问题讨论】:

  • 您想在回收站视图中显示带有名称的图像吗?
  • 是的。 @MurliPrajapati。以前只有imahe url。我循环通过,在评论部分代码的方式。现在我在 hashmap 中添加标题。并希望为每个图像显示单独的标题。但不知道怎么做
  • @MurliPrajapati 我已经给出了我的完整代码 od 活动
  • 图片的网址和名称是固定的还是可能会改变?
  • 在这种情况下,网址是固定的,据此我现在有 10 个网址和 10 个名称

标签: java android list arraylist hashmap


【解决方案1】:

在 MainActivity 中创建两个 String 数组,其中一个包含图像 url 和其他名称。

String[] imgUrls = {"url1","url2","url3"};  
String[] imgNames = {"name1","name2","name3"};  

遍历这些数组并创建模型类的列表。

ArrayList<ImageModel> data = new ArrayList<ImageModel>();
for (int i = 0; i < 3; i++) { //change size according to your size.

        ImageModel imageModel = new ImageModel();
        imageModel.setName(imgNames[i]);
        imageModel.setUrl(imgUrls[i]);
        data.add(imageModel);

    }   
mAdapter = new GalleryAdapter(MainActivity.this, data);
mRecyclerView.setAdapter(mAdapter);

在您的 RecyclerView 行布局中添加 TextView R.layout.list_item
在您的适配器中使用此 TextView 设置图像名称。

public static class MyItemHolder extends RecyclerView.ViewHolder {
    ImageView mImg;  
    TextView mTextView; 


    public MyItemHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.item_textview);
        mImg = (ImageView) itemView.findViewById(R.id.item_img);
        }
    }  


@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        Glide.with(context).load(data.get(position).getUrl())
                .thumbnail(0.5f)
                .override(200,200)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(((MyItemHolder) holder).mImg);  
        holder.mTextView.setText(data.get(position).getName());

}  

您的其余代码将是相同的。

【讨论】:

  • 运行此代码时应用程序崩溃。我在问题中给出了我修改后的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2011-10-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多