美文网首页
基类(原始)

基类(原始)

作者: 谜之龙 | 来源:发表于2017-05-03 17:17 被阅读0次

主界面的基类
在使用时要依赖3个,下图右2,搜索butterknife(红框中的2个),recycler


DO0XU9`]0@EM6S_D7]3(`QJ.png
}NQWKYMTXZF`7F8[EOV]M{1.png
public abstract class BaseAcyivity extends AppCompatActivity {

private Unbinder bind;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getlayoutId());
    bind = ButterKnife.bind(this);
    initdata();
    setOnClick();


}

public abstract void initdata() ;

public abstract int getlayoutId();

public void setOnClick(){

}

@Override
protected void onDestroy() {
    super.onDestroy();
    bind.unbind();
}
}

APP的基类,承接上下文(记住APP这个类必须要在清单文件中注册)

记住APP这个类必须要在清单文件中注册
public class App extends Application{

public static App appContext;

@Override
public void onCreate() {
    super.onCreate();
    appContext = this;
}
}

适配器的基类(Recycler)

public abstract class AllBaseAdapter<T> extends          RecyclerView.Adapter<AllBaseAdapter.MyViewHolder>{

private List<T> data;
private onItemClickListaner listaner;

public AllBaseAdapter(List<T> data) {
    this.data = data;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //查找对应Item布局
    View view = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(), parent, false);
     MyViewHolder holder=new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(final AllBaseAdapter.MyViewHolder holder, final int position) {
    //设置数据
    mset(holder,data.get(position));
    //item设置的点击事件
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (listaner!=null){
                listaner.onItemClick(v,position);
            }
        }
    });
}
//传过来的数据个数
@Override
public int getItemCount() {
    return data==null?0:data.size();
}

public abstract int getLayoutId() ;


public class MyViewHolder extends RecyclerView.ViewHolder{

    public View itemView;

    public MyViewHolder(View itemView) {
        super(itemView);
        this.itemView = itemView;
    }
    //将ID的强转写在这里
    protected <E extends View> E getViewById(@IdRes int viewId) {
        return (E) itemView.findViewById(viewId);
    }
    //设置数据
    public void setText(@IdRes int id,String context){
        TextView textView= getViewById(id);
        textView.setText(context);
    }
    public void setIoce(@IdRes int id, Drawable ioce){
        ImageView imageView=getViewById(id);
        imageView.setImageDrawable(ioce);
    }
    //。。。。。可以设置所有的控件,用时直接点
}
//viewHolder重写承接,setData代表数组中的东西
public abstract void mset(MyViewHolder holder,Object setData);

 //自己定义一个点击监听的接口
public interface onItemClickListaner{
    void onItemClick(View itemView,int position);
}
//设置监听,用传进来的listaner代替它的listaner
public void setOnItemClick(onItemClickListaner listaner){
    this.listaner = listaner;
}
}



举个例子

继承适配器的类

public class MainAdapter extends AllBaseAdapter {

public MainAdapter(List data) {
    super(data);
}

@Override
public int getLayoutId() {
    return R.layout.item_main;
}

@Override
public void mset(MyViewHolder viewHolder, Object setData) {
    //这里可以设置各种控件的数据:viewHolder.        点后面跟控件的方法名
     viewHolder.setText(R.id.tv_item_recycler, (String) setData);
}
}

主界面对点击的使用

 public class MainActivity extends BaseAcyivity {

@BindView(R.id.recycler_main)
RecyclerView recyclerMain;
private MainAdapter adapter;


@Override
public void initdata() {
    List<String> datas=new ArrayList<>();
    datas.add("草莓");datas.add("火龙果");datas.add("苹果");datas.add("木瓜");
    datas.add("西瓜");datas.add("橘子");datas.add("香蕉");datas.add("火龙果");
    datas.add("梨");datas.add("草莓");datas.add("火龙果");datas.add("苹果");
    datas.add("木瓜");datas.add("西瓜");datas.add("橘子");datas.add("香蕉");
    datas.add("火龙果");datas.add("梨");
    RecyclerView.LayoutManager manager=new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false);
    recyclerMain.setLayoutManager(manager);
    adapter = new MainAdapter(datas);
    recyclerMain.setAdapter(adapter);
    //分割线
    recyclerMain.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));

}

@Override
public int getlayoutId() {
    return R.layout.activity_main;
}

public void setOnClick(){
   adapter.setOnItemClick(new AllBaseAdapter.onItemClickListaner() {
       @Override
       public void onItemClick(View itemView, int position) {
           Toast.makeText(MainActivity.this,"ok",Toast.LENGTH_SHORT).show();
       }
   });
}
}

布局自己写找到对应ID

相关文章

  • 基类(原始)

    主界面的基类在使用时要依赖3个,下图右2,搜索butterknife(红框中的2个),recycler APP的基...

  • 装饰者模式

    类图 所有原始类与装饰者类都必须实现共同基类Beverage 所有装饰者类都持有另外一个属于基类类型的对象引用(这...

  • C++的多继承与虚继承

    1.多继承的基本使用2.当一个派生类,从多个基类派生,而这些基类又有一个共同的基类,则对后面这个原始基类中声明的属...

  • 第十三章 类继承(2)一个简单的基类和派生

    (二)一个简单的基类和派生类 1.基础概念: 从一个类派生出另一个类时,原始类叫作基类,派生出来的类叫作派生类。类...

  • python - 类的继承

    什么是继承 继承是一种创建类的方法,一个类可以继承一个或多个父类,原始类称为基类或超类。继承可以很方便的帮助子类拥...

  • python - 类的继承

    什么是继承 继承是一种创建类的方法,一个类可以继承一个或多个父类,原始类称为基类或超类。继承可以很方便的帮助子类拥...

  • 基类Adapter和基类Holder

    1.MyBaseAdapter,最原始的基类,为子类adaper实现了初始化数据 mDataSet,此数据为通过构...

  • java中基类指针只向派生类对象的四种方法

    总结: 1.基类指针指向基类对象:简单,只需通过基类指针简单的调用基类的功能。 2.派生类指针只想基类对象:同上。...

  • C++ - 基类,派生类同名成员与访问范围

    基类和派生类有同名成员的情况 访问范围说明符 基类的 private 成员:基类的成员函数基类的友员函数 基类的 ...

  • Room-数据库操作基类

    基类 没有实现基类

网友评论

      本文标题:基类(原始)

      本文链接:https://www.haomeiwen.com/subject/lazktxtx.html