簡體   English   中英

滑動以通過ItemTouchHelper RecyclerView刪除嗎?

[英]Swip to delete though ItemTouchHelper RecyclerView?

我正在嘗試使用ItemTouchHelper onSwiped方法實現刷卡刪除 RecyclerView 問題是,它給了我們適配器位置。 但是如何從游標加載器中檢索項目的實際SQL ID? 我正在使用CursorLoaderContentProvider 友善的指導

    public class ActivityTaskList extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {


......
            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

            int pos1 = viewHolder.getAdapterPosition();
            deleteData(pos1);
            Log.d(TAG,"onSwiped");
                         };

        private void deleteData(long adapterPosition) {
         Uri uri = Uri.parse(TaskProviderP.CONTENT_URI + "/"+ (int)adapterPosition);
            getContentResolver().delete(uri, null,null);

            Log.d(TAG,"deleteData");
        }

        @Override
        public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
            Log.d(TAG, "onCreateLoader");
            String[] projection = { TaskTableP.COLUMN_ID, TaskTableP.COLUMN_NAME,TaskTableP.COLUMN_DESCRIPTION };
            CursorLoader cursorLoader = new CursorLoader(this,
            TaskProviderP.CONTENT_URI, projection, null, null, null);
            return cursorLoader;
        }
        @Override
        public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
            Log.d(TAG, "onLoadFinished");
            taskAdapterP.setCursor(cursor);
        }
        @Override
        public void onLoaderReset(Loader<Cursor> loader) {
            Log.d(TAG, "onLoaderReset");
            taskAdapterP.setCursor(null);
        }
    }

附上我的Adapter類以供參考。 我認為Nilesh的解決方案需要某種列表或數組。 我是新蜜蜂,對此感到困惑。

public class TaskAdapterP extends RecyclerView.Adapter<TaskAdapterP.TViewHolder> {


    private Context context;

    public TaskAdapterP(Context context) {
        this.context = context;
        setHasStableIds(true);

    }
    private Cursor cursor;

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }
    public void setCursor(Cursor cursor) {
        this.cursor = cursor;
        Log.d(TAG, "setCursor");
        notifyDataSetChanged();
    }

    @Override
    public TViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.one_task_row, parent, false);
        Log.d(TAG, "onCreateViewHolder");
        return new TViewHolder(view);
    }





    @Override
    public void onBindViewHolder(TViewHolder holder, int position) {
        Log.d(TAG, "onBindViewHolder");
        if (cursor != null) {
            cursor.moveToPosition(position);
            holder.vhTask_Title.setText(cursor.getString(cursor.getColumnIndexOrThrow(TaskTableP.COLUMN_NAME)).replaceAll("\\<[^>]*>", ""));
            holder.vhTask_Description.setText(cursor.getString(cursor.getColumnIndexOrThrow(TaskTableP.COLUMN_DESCRIPTION)));
        }
    }
    @Override
    public int getItemCount() {
        Log.d(TAG, "getItemCount");
        return cursor == null ? 0 : cursor.getCount();
    }
    class TViewHolder extends RecyclerView.ViewHolder {
        TextView vhTask_Title, vhTask_Description;
        public TViewHolder(View itemView) {
            super(itemView);
            Log.d(TAG, "TViewHolder Constructor");
            vhTask_Title = (TextView) itemView.findViewById(R.id.textview_task_name);
            vhTask_Description = (TextView) itemView.findViewById(R.id.textview_task_description);
        }
    }
}

一種解決方案是在adpter中寫入getID方法,該方法將return提供的位置信息的 ID。

public int getID(int positioin) {
        return visitingCards.get(positioin).getNo();
    }

然后使用這樣的適配器對象調用getID

 mAdapter.getID(viewHolder.getAdapterPosition())

您可以為您的適配器更新

public int getID(int positioin) {
        return cursor.moveToPosition(position).cursor.getXXX(YOUR_COLUM_NAME);// so that will return id
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM