Android-RecyclerView(解析二)

package com.example.recyclerview;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.os.Bundle;
import android.app.Activity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity implements MyAdapter.OnChildClickListener {

    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler);   
        //添加100條假數據
        List<String> list=new ArrayList<String>();
        for(int i=0;i<100;i++){
            list.add(String.format(Locale.CHINA, "第%03d條數據",i));
        }
        adapter=new MyAdapter(this, list);

        /**
         * 在java代碼中使用LinearLayoutManager,不在佈局文件中使用
         */
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);//(垂直水平,是否翻轉呈現佈局)

        GridLayoutManager gridLayoutManager=new GridLayoutManager(this, 3);//(列數)

        //GridLayoutManager可以設置摸個item的樣式
//      gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
//          
//          @Override
//          public int getSpanSize(int position) {//佔多少列
//              if(position==0){
//                  return 3; //第一行佔三列
//              }
//              
//              return 1;//默認佔一列
//          }
//      });
        //動畫系統  刪除動畫以及添加動畫  不做詳細介紹
        DefaultItemAnimator defaultItemAnimator=new DefaultItemAnimator();

        recycler.setLayoutManager(gridLayoutManager);//在xml佈局中可以刪掉對linearLayoutManager的引用

        recycler.setItemAnimator(defaultItemAnimator);

        recycler.setAdapter(adapter);
        adapter.setOnChildClickListnener(this);
    }
    /**
     * 點擊事件
     */
    @Override
    public void onChildClick(RecyclerView parent, View view, int position,
            String data) {
        //將點擊的內容數據打印出來
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
        //調用刪除item方法
        adapter.remove(position);
    }

}

控制間距:

package com.example.recyclerview;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.R.color;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.State;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity implements MyAdapter.OnChildClickListener {

    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler=(RecyclerView) findViewById(R.id.recycler);   
        //添加100條假數據
        List<String> list=new ArrayList<String>();
        for(int i=0;i<100;i++){
            list.add(String.format(Locale.CHINA, "第%03d條數據",i));
        }
        adapter=new MyAdapter(this, list);

        /**
         * 在java代碼中使用LinearLayoutManager,不在佈局文件中使用
         */
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);//(垂直水平,是否翻轉呈現佈局)

        GridLayoutManager gridLayoutManager=new GridLayoutManager(this, 3);//(列數)

        //GridLayoutManager可以設置摸個item的樣式
//      gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
//          
//          @Override
//          public int getSpanSize(int position) {//佔多少列
//              if(position==0){
//                  return 3; //第一行佔三列
//              }
//              
//              return 1;//默認佔一列
//          }
//      });
        //動畫系統  刪除動畫以及添加動畫  不做詳細介紹
        DefaultItemAnimator defaultItemAnimator=new DefaultItemAnimator();

        recycler.setLayoutManager(gridLayoutManager);//在xml佈局中可以刪掉對linearLayoutManager的引用

        recycler.setItemAnimator(defaultItemAnimator);

        recycler.setAdapter(adapter);

        /**
         * 設置行間距
         */
        recycler.addItemDecoration(new RecyclerView.ItemDecoration() {
            //在我們所有控件繪製之前調用的繪製方法
            @Override
            public void onDraw(Canvas c, RecyclerView parent, State state) {
                // TODO Auto-generated method stub
                super.onDraw(c, parent, state);
                //繪製背景
                c.drawColor(color.black);
                //也可以畫一個動畫
            }
            //在佈局上方圖片等操作
            @Override
            public void onDrawOver(Canvas c, RecyclerView parent, State state) {
                // TODO Auto-generated method stub
                super.onDrawOver(c, parent, state);

            }
            //分割線
            @Override
            public void getItemOffsets(Rect outRect, View view,
                    RecyclerView parent, State state) {
                // TODO Auto-generated method stub
                super.getItemOffsets(outRect, view, parent, state);
//              //舉例子:
//              int position=parent.getChildAdapterPosition(view);
//              outRect.set(0,5*position,0,5*position);//間距越來越大

                //分割線的寬高
                outRect.set(0,5,0,5);//繪製了10個像素的間距  是黑色的
            }

        });

        adapter.setOnChildClickListnener(this);
    }
    /**
     * 點擊事件
     */
    @Override
    public void onChildClick(RecyclerView parent, View view, int position,
            String data) {
        //將點擊的內容數據打印出來
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
        //調用刪除item方法
        adapter.remove(position);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章