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();
        }
    }