基于DataBinding的基类(Activity、Fragment、Adapter)
1、BaseBindActivity
public abstract class BaseBindActivity<DB extends ViewDataBinding> extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DB db = DataBindingUtil.setContentView(this, getLayoutId());
initView(db);
}
/**
* 获取资源ID
*
* @return 布局资源ID
*/
protected abstract int getLayoutId();
/**
* 初始化界面
* @param bindView 界面绑定对象
*/
protected abstract void initView(DB bindView);
}
布局文件示例
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="example"
type="String" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="@{example}"
android:layout_width="wrap_context"
android:layout_height="wrap_context"/>
</LinearLayout>
</layout>
简单调用
public class MainActivity extends BaseBindActivity<AcitivtyMainBinding> {
@Override
protected int getLayoutId() {
return R.layout.acitivty_main;
}
@Override
protected void initView(final AcitivtyMainBinding bindView) {
bindView.setExample("示例");
}
}
2、BaseBindFragment
public abstract class BaseBindFragment<DB extends ViewDataBinding> extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
DB db = DataBindingUtil.inflate(inflater, getLayoutId(), container, false);
initView(db);
return db.getRoot();
}
/**
* 获取资源ID
*
* @return 布局资源ID
*/
protected abstract int getLayoutId();
/**
* 初始化界面
* @param bindView 界面绑定对象
*/
protected abstract void initView(DB bindView);
}
3、BaseBindAdapter
①继承RecycleView.Adapter
public abstract class BaseBindAdapter<DB extends ViewDataBinding, T> extends RecyclerView.Adapter<BaseBindAdapter.BindViewHolder> {
private List<T> list;
private int resourceId;
public BaseBindAdapter(List<T> list, int resourceId) {
this.list = list;
this.resourceId = resourceId;
if (this.list == null) {
this.list = new ArrayList<T>();
}
}
@NonNull
@Override
public BaseBindAdapter.BindViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
DB db = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), resourceId, parent, false);
BindViewHolder holder = new BindViewHolder(db.getRoot());
holder.bindView = db;
return holder;
}
@Override
public void onBindViewHolder(@NonNull BaseBindAdapter.BindViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return list.size();
}
public class BindViewHolder extends RecyclerView.ViewHolder {
public DB bindView;
public BindViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
②继承PagerAdapter
public abstract class BaseBindPagerAdapter<DB extends ViewDataBinding, K, V> extends PagerAdapter {
private LinkedHashMap<K, V> map;
private LinkedHashMap<K, View> views;
private Map<Integer, K> temp;
public BaseBindPagerAdapter(LinkedHashMap<K, V> map) {
this.map = map;
if(map == null) {
map = new LinkedHashMap<>(0);
}
views = new LinkedHashMap<>(map.size());
temp = new LinkedHashMap<>(map.size());
Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
int position = 0;
while (iterator.hasNext()) {
Map.Entry<K, V> next = iterator.next();
temp.put(position++, next.getKey());
}
}
@Override
public int getCount() {
return map.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
DB binding = DataBindingUtil.inflate(LayoutInflater.from(container.getContext()), getResourceId(), container, false);
BindViewHolder holder = new BindViewHolder();
holder.bindView = binding;
initView(holder, temp.get(position));
views.put(temp.get(position), binding.getRoot());
container.addView(binding.getRoot());
return binding.getRoot();
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(views.get(temp.get(position)));
}
protected class BindViewHolder {
public DB bindView;
}
/**
* 获取资源ID
*
* @return 布局资源ID
*/
public abstract int getResourceId();
/**
* 初始化界面
* @param holder 界面句柄
* @param key 子项对应的键
* @param value 子项实例
* */
public abstract void initView(BindViewHolder holder, K key, V value);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)