安卓菜鳥的進階之路-ReclerView
阿新 • • 發佈:2019-02-18
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 classFruitAdapter 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(); } }