Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.sam.recycleviewprac;
- import android.content.Context;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.support.v7.widget.GridLayoutManager;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.support.v7.widget.StaggeredGridLayoutManager;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.Toast;
- import java.util.ArrayList;
- import java.util.List;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // get data
- List<Spot> myListSpot = getSpots();
- // get the container view
- RecyclerView myRvSpot = (RecyclerView)findViewById(R.id.rv_ID);
- if (myRvSpot != null){
- // set layoutManager to setup overall designing strucuture;
- // 三選一:
- myRvSpot.setLayoutManager(new LinearLayoutManager(this));
- //myRvSpot.setLayoutManager(new GridLayoutManager(this,1));
- //myRvSpot.setLayoutManager(new StaggeredGridLayoutManager(3,1));
- // set Adapter for the container view - put context(載入view用) and data into it
- myRvSpot.setAdapter(new SpotAdapter(this, myListSpot));
- }
- }
- //
- // RecyclerView.Adapter< VH extends android.support.v7.widget.RecyclerView.ViewHolder>
- // generic matters here: <SpotAdapter.ViewHolder>
- public class SpotAdapter extends RecyclerView.Adapter<SpotAdapter.MyViewHolder> {
- private Context context;
- private List<Spot> myListSpot;
- private LayoutInflater myLayoutInflater;
- public SpotAdapter(Context context, List<Spot> myListSpot) {
- this.context = context;
- this.myListSpot = myListSpot;
- myLayoutInflater = LayoutInflater.from(context);
- }
- @Override
- public int getItemCount() {
- return this.myListSpot.size();
- }
- // create a ViewHoder class that is child of RecyclerView.ViewHolder
- // 因為繼承RecyclerView.Adapter<E extends RecyclerView.ViewHolder>其中有個方法改寫時需要用到
- public class MyViewHolder extends RecyclerView.ViewHolder{
- ImageView ivImage;
- TextView tvHotel;
- TextView tvPrice;
- // 把拿到的到個view的資料一個個存好成實體變數
- public MyViewHolder(View itemView) {
- super(itemView); // 必須使用這個父建構式,因為RecyclerView.ViewHolder沒有空參數的建構式 - 用父類別的實體變數來指向這個View物件,第90行會用到
- this.ivImage = (ImageView) itemView.findViewById(R.id.ivImage);
- this.tvHotel = (TextView) itemView.findViewById(R.id.tvHotel);
- this.tvPrice = (TextView) itemView.findViewById(R.id.tvPrice);
- }
- }
- @Override
- public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- // 將customed layout載入,並裝在ViewHolder中回傳給RecyclerView使用
- View itemView = this.myLayoutInflater.inflate(R.layout.recycleview_item, parent, false);
- return new MyViewHolder(itemView); //可將ViewHolder
- }
- @Override
- // onBindViewHolder(VH holder, int dposition): VH
- // ( view , data )
- public void onBindViewHolder(MyViewHolder viewHolder, final int position) {
- Spot mySpot = myListSpot.get(position);
- viewHolder.ivImage.setImageResource(mySpot.getimgId());
- viewHolder.tvHotel.setText(mySpot.getHotelName());
- viewHolder.tvPrice.setText(Integer.toString(mySpot.getPrice()) + "$");
- viewHolder.itemView.setOnClickListener(new View.OnClickListener(){
- @Override
- public void onClick(View view) {
- Spot Spot = myListSpot.get(position);
- //showImgToast(mySpot2.getimgId());
- Intent intent = new Intent(MainActivity.this, ResultImg.class);
- Bundle bundle = new Bundle();
- bundle.putSerializable("Spot", Spot);
- intent.putExtras(bundle);
- startActivity(intent);
- }
- });
- }
- }// end
- private void showImgToast(int imgId){
- ImageView imageView = new ImageView(getApplicationContext());
- imageView.setImageResource(imgId);
- Toast toast = new Toast(getApplicationContext());
- toast.setView(imageView);
- toast.setDuration(Toast.LENGTH_SHORT);
- toast.show();
- }
- private List<Spot> getSpots() {
- List<Spot> spots = new ArrayList<>();
- spots.add(new Spot(R.drawable.hotel1,"福華飯店",300));
- spots.add(new Spot(R.drawable.hotel2,"青年旅館",100));
- spots.add(new Spot(R.drawable.hotel3,"我家三樓房間",50));
- return spots;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement