Java 安卓&x2B;ListView+;滑动元件
我正在为我的项目使用,一切正常(滑动元素),但我的问题是-是否可以通过单击某些Java 安卓&x2B;ListView+;滑动元件,java,android,listview,adapter,baseadapter,Java,Android,Listview,Adapter,Baseadapter,我正在为我的项目使用,一切正常(滑动元素),但我的问题是-是否可以通过单击某些ListView元素开始滑动动画 第二个问题: 如何为自定义对象实现timedSwipeUndo 这是我的ListView的代码 final ArrayAdapter<Product> adapter = new MyListAdapter(this,R.layout.text_view,productsDef); SimpleSwipeUndoAdapter simpleSwipeUndo
ListView
元素开始滑动动画
第二个问题:
如何为自定义对象实现timedSwipeUndo
这是我的ListView的代码
final ArrayAdapter<Product> adapter = new MyListAdapter(this,R.layout.text_view,productsDef);
SimpleSwipeUndoAdapter simpleSwipeUndoAdapter = new SimpleSwipeUndoAdapter(adapter, this, new MyOnDismissCallback(adapter));
AlphaInAnimationAdapter animAdapter = new AlphaInAnimationAdapter(simpleSwipeUndoAdapter);
animAdapter.setAbsListView(listView);
assert animAdapter.getViewAnimator() != null;
animAdapter.getViewAnimator().setInitialDelayMillis(INITIAL_DELAY_MILLIS);
listView.setAdapter(animAdapter);
/* Enable drag and drop functionality */
listView.enableDragAndDrop();
listView.setDraggableManager(new TouchViewDraggableManager(R.id.list_row_draganddrop_touchview));
listView.setOnItemMovedListener(new MyOnItemMovedListener(adapter));
listView.setOnItemLongClickListener(new MyOnItemLongClickListener(listView));
/* Enable swipe to dismiss */
listView.enableSimpleSwipeUndo();
/* Add new items on item click */
//listView.setOnItemClickListener(new MyOnItemClickListener(listView));
final ArrayAdapter adapter=新的MyListAdapter(此,R.layout.text\u视图,productsDef);
SimplesWipesUndoAdapter SimplesWipesUndoAdapter=新SimplesWipesUndoAdapter(适配器,此,新MyOnDismissCallback(适配器));
AlphaInAnimationAdapter animAdapter=新的AlphaInAnimationAdapter(SimpleSweepUndoAdapter);
animAdapter.setAbsListView(listView);
断言animAdapter.getViewAnimator()!=无效的
animAdapter.getViewAnimator().setInitialDelayMillis(INITIAL_DELAY_MILLIS);
setAdapter(animAdapter);
/*启用拖放功能*/
enableDragAndDrop();
setDragableManager(新的TouchViewDragableManager(R.id.list\u row\u draganddrop\u touchview));
setOnItemMovedListener(新的MyOnItemMovedListener(适配器));
setOnItemLongClickListener(新的MyOnItemLongClickListener(listView));
/*启用刷卡以关闭*/
EnableSimpleSweepUndo();
/*在项目上添加新项目单击*/
//setOnItemClickListener(新的MyOnItemClickListener(listView));
在文档is中-对于timedUndoAdapter,请使用timedUndoAdapter。但当我尝试创建适配器时,出现错误:
Error:(249, 51) error: constructor TimedUndoAdapter in class TimedUndoAdapter cannot be applied to given types;
required: V,Context,OnDismissCallback
found: ArrayAdapter<Product>,DefaultProductsListUserEdit,DefaultProductsListUserEdit.MyOnDismissCallback
reason: inferred type does not conform to declared bound(s)
inferred: ArrayAdapter<Product>
bound(s): BaseAdapter,UndoAdapter
where V is a type-variable:
V extends BaseAdapter,UndoAdapter declared in constructor <V>TimedUndoAdapter(V,Context,OnDismissCallback)
Error:(249,51)Error:TimedUndoAdapter类中的构造函数TimedUndoAdapter不能应用于给定类型;
必需:V、上下文、OnDismissCallback
找到:ArrayAdapter、DefaultProductsListUserEdit、DefaultProductsListUserEdit.MyOnDismissCallback
原因:推断的类型不符合声明的绑定
推断:ArrayAdapter
绑定:BaseAdapter、UndoAdapter
其中V是一个类型变量:
V扩展BaseAdapter,在构造函数TimedUndoAdapter中声明的UndoAdapter(V,上下文,OnDismissCallback)
我不能对自定义对象使用TimedAdapter,或者我必须重写某些方法
这是myAdapter:
public class MyListAdapter extends ArrayAdapter<Product> implements UndoAdapter {
private final Context mContext;
HashMap<Product, Integer> mIdMap = new HashMap<Product, Integer>();
ArrayList<Product> products = new ArrayList<Product>();
final int INVALID_ID = -1;
LayoutInflater lInflater;
public MyListAdapter(Context context, int textViewResourceId, List<Product> prod) {
//super(context, textViewResourceId, prod);
super(prod);
lInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mContext = context;
for (int i = 0; i < prod.size(); i++) {
//add(prod.get(i));
mIdMap.put(prod.get(i),i);
}
}
@Override
public long getItemId(final int position) {
//return getItem(position).hashCode();
Product item = (Product) getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
//TextView view = (TextView) convertView;
View view = convertView;
if (view == null) {
//view = (TextView) LayoutInflater.from(mContext).inflate(R.layout.list_row, parent, false);
view = lInflater.inflate(R.layout.item, parent, false);
}
Product p = getItem(position);
//view.setText(getItem(position).getProductName());
((TextView) view.findViewById(R.id.tvDescr)).setText(p.getProductName());
return view;
}
@NonNull
@Override
public View getUndoView(final int position, final View convertView, @NonNull final ViewGroup parent) {
View view = convertView;
if (view == null) {
//view = LayoutInflater.from(mContext).inflate(R.layout.undo_row, parent, false);
view = lInflater.inflate(R.layout.undo_row, parent, false);
}
return view;
}
@NonNull
@Override
public View getUndoClickView(@NonNull final View view) {
return view.findViewById(R.id.undo_row_undobutton);
}
public View getHeaderView(final int position, final View convertView, final ViewGroup parent) {
TextView view = (TextView) convertView;
//View view = convertView;
if (view == null) {
//view = (TextView) LayoutInflater.from(mContext).inflate(R.layout.list_header, parent, false);
//view = lInflater.inflate(R.layout.list_header, parent, false);
}
//view.setText(mContext.getString(R.string.header, getHeaderId(position)));
return view;
}
public long getHeaderId(final int position) {
return position / 10;
}
}
公共类MyListAdapter扩展ArrayAdapter实现UndoAdapter{
私有最终上下文mContext;
HashMap mIdMap=新的HashMap();
ArrayList产品=新的ArrayList();
final int INVALID_ID=-1;
拉平机;
公共MyListAdapter(上下文上下文、int textViewResourceId、列表产品){
//super(上下文、textViewResourceId、prod);
超级(prod);
lInflater=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
mContext=上下文;
对于(int i=0;i
和类MyOnDismissCallback(适配器):
私有类MyOnDismissCallback实现OnDismissCallback{
私人最终阵列适配器;
@可空
私人土司;
MyOnDismissCallback(最终阵列适配器){
mAdapter=适配器;
}
@凌驾
public void onDismiss(@NonNull final ViewGroup listView,@NonNull final int[]reverseSortedPositions){
用于(内部位置:反向启动位置){
移动(位置);
}
如果(mToast!=null){
mToast.cancel();
}
mToast=Toast.makeText(
DefaultProductsListUserEdit.this,
“已删除项目”,
吐司,长度
);
mToast.show();
}
}
提前谢谢
private class MyOnDismissCallback implements OnDismissCallback {
private final ArrayAdapter<Product> mAdapter;
@Nullable
private Toast mToast;
MyOnDismissCallback(final ArrayAdapter<Product> adapter) {
mAdapter = adapter;
}
@Override
public void onDismiss(@NonNull final ViewGroup listView, @NonNull final int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
mAdapter.remove(position);
}
if (mToast != null) {
mToast.cancel();
}
mToast = Toast.makeText(
DefaultProductsListUserEdit.this,
"REMOVED ITEM",
Toast.LENGTH_LONG
);
mToast.show();
}
}