2017-09-08 9 views
1

Image gallaryの1つの機能を実装しようとしているアンドロイドアプリを開発しています。さて、当初は、タイトル名で画像URLを表示したいと思っています。私は画像を持つタイトルをマッピングするためにhashmapを使用しています。私は2つのStringフィールドurlとtitleを持つモデルクラスを持っています。しかし、問題は私が開発分野で非常に新しいことです、そして今、画像のクリックに基づいてタイトルを表示する方法を確認します。ここに私のモデルですクラス設定方法アンドロイドの画像選択に基づく画像のタイトル

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); 
    } 
} 

ここでは、画像とタイトルを使ってハッシュマップを作成し、ビューに表示する主なアクティビティを示します。アイテムリスト行の

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> 
+0

リサイクラビューでその名前の画像を表示したいですか? –

+0

はい。 @MurliPrajapati。以前は、ただのURLしかありません。コメントセクションコードの途中でループします。今、タイトルをハッシュマップに追加します。それぞれの画像に別々のタイトルを表示したい。しかし、それを行う方法を取得しないでください – tamrezh21

+0

@MurliPrajapati私は完全なコードodを与えているアクティビティ – tamrezh21

答えて

0

TWを作成していますo String MainActivityにイメージ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行レイアウトR.layout.list_itemTextViewを追加します。
アダプタでは、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()); 

} 

残りのコードは同じになります。

+0

このコードを実行している間、アプリがクラッシュしています。私は質問に変更されたコードを与えました – tamrezh21

+0

何がエラーですか? –

関連する問題