new ui for script list
This commit is contained in:
63
app/src/main/java/com/stardust/widget/AutoAdapter.java
Normal file
63
app/src/main/java/com/stardust/widget/AutoAdapter.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package com.stardust.widget;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/8/19.
|
||||
*/
|
||||
|
||||
public class AutoAdapter<DT> extends RecyclerView.Adapter<BindableViewHolder<DT>> {
|
||||
|
||||
private ViewHolderSupplier<? extends BindableViewHolder<DT>> mViewHolderSupplier;
|
||||
private List<DT> mList = new ArrayList<>();
|
||||
|
||||
public AutoAdapter(ViewHolderSupplier<? extends BindableViewHolder<DT>> viewHolderSupplier) {
|
||||
mViewHolderSupplier = viewHolderSupplier;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BindableViewHolder<DT> onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
return mViewHolderSupplier.createViewHolder(parent, viewType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(BindableViewHolder<DT> holder, int position) {
|
||||
holder.bind(mList.get(position), position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mList.size();
|
||||
}
|
||||
|
||||
public void remove(DT data) {
|
||||
int pos = mList.indexOf(data);
|
||||
if (pos < 0)
|
||||
return;
|
||||
mList.remove(pos);
|
||||
notifyItemRemoved(pos);
|
||||
}
|
||||
|
||||
public void remove(int index) {
|
||||
mList.remove(index);
|
||||
notifyItemRemoved(index);
|
||||
}
|
||||
|
||||
public void addAll(Collection<? extends DT> c) {
|
||||
mList.addAll(c);
|
||||
notifyItemRangeInserted(mList.size() - c.size() - 1, mList.size() - 1);
|
||||
}
|
||||
|
||||
public void setData(Collection<? extends DT> c) {
|
||||
mList.clear();
|
||||
mList.addAll(c);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,13 @@
|
||||
package com.stardust.widget;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/4/8.
|
||||
*/
|
||||
@@ -11,4 +16,18 @@ public abstract class ViewHolderSupplier<VH extends RecyclerView.ViewHolder> {
|
||||
|
||||
public abstract VH createViewHolder(ViewGroup parent, int viewType);
|
||||
|
||||
public static <VH extends RecyclerView.ViewHolder> ViewHolderSupplier<VH> of(final Class<VH> c, final int layoutRes) {
|
||||
return new ViewHolderSupplier<VH>() {
|
||||
@Override
|
||||
public VH createViewHolder(ViewGroup parent, int viewType) {
|
||||
try {
|
||||
Constructor<VH> constructor = c.getConstructor(View.class);
|
||||
return constructor.newInstance(LayoutInflater.from(parent.getContext()).inflate(layoutRes, parent, false));
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user