uopspop

Untitled

Sep 26th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.30 KB | None | 0 0
  1. package com.example.sam.recycleviewprac;
  2.  
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.os.Bundle;
  7. import android.support.v7.widget.GridLayoutManager;
  8. import android.support.v7.widget.LinearLayoutManager;
  9. import android.support.v7.widget.RecyclerView;
  10. import android.support.v7.widget.StaggeredGridLayoutManager;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.ImageView;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17.  
  18. import java.util.ArrayList;
  19. import java.util.List;
  20.  
  21. public class MainActivity extends AppCompatActivity {
  22.  
  23.     @Override
  24.     protected void onCreate(Bundle savedInstanceState) {
  25.         super.onCreate(savedInstanceState);
  26.         setContentView(R.layout.activity_main);
  27.  
  28.         // get data
  29.         List<Spot> myListSpot = getSpots();
  30.         // get the container view
  31.         RecyclerView myRvSpot = (RecyclerView)findViewById(R.id.rv_ID);
  32.         if (myRvSpot != null){
  33.             // set layoutManager to setup overall designing strucuture;
  34.             // 三選一:
  35.             myRvSpot.setLayoutManager(new LinearLayoutManager(this));
  36.             //myRvSpot.setLayoutManager(new GridLayoutManager(this,1));
  37.             //myRvSpot.setLayoutManager(new StaggeredGridLayoutManager(3,1));
  38.             // set Adapter for the container view - put context(載入view用) and data into it
  39.             myRvSpot.setAdapter(new SpotAdapter(this, myListSpot));
  40.  
  41.         }
  42.  
  43.     }
  44.     //
  45.     // RecyclerView.Adapter< VH extends android.support.v7.widget.RecyclerView.ViewHolder>
  46.     // generic matters here: <SpotAdapter.ViewHolder>
  47.     public class SpotAdapter extends RecyclerView.Adapter<SpotAdapter.MyViewHolder>  {
  48.         private Context context;
  49.         private List<Spot> myListSpot;
  50.         private LayoutInflater myLayoutInflater;
  51.  
  52.         public SpotAdapter(Context context, List<Spot> myListSpot) {
  53.             this.context = context;
  54.             this.myListSpot = myListSpot;
  55.             myLayoutInflater = LayoutInflater.from(context);
  56.         }
  57.  
  58.         @Override
  59.         public int getItemCount() {
  60.             return this.myListSpot.size();
  61.         }
  62.  
  63.         // create a ViewHoder class that is child of RecyclerView.ViewHolder
  64.         // 因為繼承RecyclerView.Adapter<E extends RecyclerView.ViewHolder>其中有個方法改寫時需要用到
  65.         public class MyViewHolder extends RecyclerView.ViewHolder{
  66.             ImageView ivImage;
  67.             TextView tvHotel;
  68.             TextView tvPrice;
  69.             // 把拿到的到個view的資料一個個存好成實體變數
  70.             public MyViewHolder(View itemView) {
  71.                 super(itemView); // 必須使用這個父建構式,因為RecyclerView.ViewHolder沒有空參數的建構式 - 用父類別的實體變數來指向這個View物件,第90行會用到
  72.                 this.ivImage = (ImageView) itemView.findViewById(R.id.ivImage);
  73.                 this.tvHotel = (TextView) itemView.findViewById(R.id.tvHotel);
  74.                 this.tvPrice = (TextView) itemView.findViewById(R.id.tvPrice);
  75.             }
  76.         }
  77.  
  78.         @Override
  79.         public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  80.             // 將customed layout載入,並裝在ViewHolder中回傳給RecyclerView使用
  81.             View itemView = this.myLayoutInflater.inflate(R.layout.recycleview_item, parent, false);
  82.             return new MyViewHolder(itemView); //可將ViewHolder
  83.         }
  84.  
  85.         @Override
  86.         // onBindViewHolder(VH holder, int dposition): VH
  87.         //                          (         view        ,      data   )
  88.         public void onBindViewHolder(MyViewHolder viewHolder, final int position) {
  89.             Spot mySpot = myListSpot.get(position);
  90.             viewHolder.ivImage.setImageResource(mySpot.getimgId());
  91.             viewHolder.tvHotel.setText(mySpot.getHotelName());
  92.             viewHolder.tvPrice.setText(Integer.toString(mySpot.getPrice()) + "$");
  93.  
  94.             viewHolder.itemView.setOnClickListener(new View.OnClickListener(){
  95.                 @Override
  96.                 public void onClick(View view) {
  97.                     Spot Spot = myListSpot.get(position);
  98.                     //showImgToast(mySpot2.getimgId());
  99.                     Intent intent = new Intent(MainActivity.this, ResultImg.class);
  100.                     Bundle bundle = new Bundle();
  101.                     bundle.putSerializable("Spot", Spot);
  102.                     intent.putExtras(bundle);
  103.                     startActivity(intent);
  104.                 }
  105.             });
  106.         }
  107.     }// end
  108.  
  109.  
  110.     private void showImgToast(int imgId){
  111.         ImageView imageView = new ImageView(getApplicationContext());
  112.         imageView.setImageResource(imgId);
  113.         Toast toast = new Toast(getApplicationContext());
  114.         toast.setView(imageView);
  115.         toast.setDuration(Toast.LENGTH_SHORT);
  116.         toast.show();
  117.     }
  118.  
  119.     private List<Spot> getSpots() {
  120.         List<Spot> spots = new ArrayList<>();
  121.         spots.add(new Spot(R.drawable.hotel1,"福華飯店",300));
  122.         spots.add(new Spot(R.drawable.hotel2,"青年旅館",100));
  123.         spots.add(new Spot(R.drawable.hotel3,"我家三樓房間",50));
  124.         return spots;
  125.     }
  126. }
Add Comment
Please, Sign In to add comment