1. 程式人生 > >安卓菜鳥的進階之路-ReclerView

安卓菜鳥的進階之路-ReclerView

1.可以實現ListView所有功能並對其進行了擴充套件

2.用法:在app/build.gradle的dependencies閉包中新增

compile 'com.android.support:recyclerview-v7:26.+'

在佈局檔案中新增//需新增完整路徑

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

新增介面卡:

public class 
FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> { private List<Fruit> mFruitList; public FruitAdapter(List<Fruit> fruitList) {//將展示的資料賦予mFruitList mFruitList = fruitList; } public class ViewHolder extends RecyclerView.ViewHolder { ImageView fruitImage
; TextView fruitName; View fruitView; public ViewHolder(View view) {//view為Recycler子項的外層佈局 super(view); fruitView = view; fruitImage = (ImageView) view.findViewById(R.id.fruit_image); fruitName = (TextView) view.findViewById(R.id.fruit_name); } } @Override public ViewHolder onCreateViewHolder
(ViewGroup parent,int viewType){//建立ViewHolder例項 View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.fruit_item,parent,false); final ViewHolder holder = new ViewHolder(view);//view表示子項 holder.fruitView.setOnClickListener(new View.OnClickListener() {//設定子項點選事件 @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(),"you clicked view" + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); holder.fruitImage.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(),"you clicked image" + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); //ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder,int position){//對子項資料進行賦值 Fruit fruit = mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); } @Override public int getItemCount(){//返回子項數量 return mFruitList.size(); } }

在.java中新增

public class MainActivity extends AppCompatActivity {
    private List<Fruit> fruitList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruit();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
/*LinearLayoutManager layoutManager = new LinearLayoutManager(this);//指定佈局方式--預設為縱向滾動
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);*///橫向滾動
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,//瀑布流佈局
StaggeredGridLayoutManager.VERTICAL);//3表示分為3列,第二個引數表示然讓佈局縱向排列
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
}

    private void initFruit() {//初始化資料
        for (int i = 0;i < 30;i++){
            Fruit apple = new Fruit(getRandomLengthName("Apple"),R.drawable.bg);
fruitList.add(apple);
Fruit banana = new Fruit(getRandomLengthName("Banana"),R.drawable.bg);
fruitList.add(banana);
}
    }

    private String getRandomLengthName(String name) {//為不同子項新增不同長度名稱,方便體現效果
        Random random = new Random();
        int lenth = random.nextInt(20) + 1;
StringBuilder builder = new StringBuilder();
        for(int i = 0;i < lenth;i++){
            builder.append(name);
}
        return builder.toString();
}
}