RecyclerView与解雇揭示图标

时间:2017-02-27 05:32:15

标签: android android-recyclerview

所以我有一个RecyclerView,我试图在视图中显示元素以显示.gif中的显示提示。有没有办法做到这一点?

如果这个问题不适合本网站,请指出我应该寻找答案的方向/发布我的问题。感谢。

到目前为止,这是我的代码,如果这样会有所帮助:

package com.cpjd.roblu.forms;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
mport android.widget.TextView;

import com.cpjd.roblu.R;
import com.cpjd.roblu.activities.CreateForm;
import com.cpjd.roblu.elements.Element;

import java.util.Collections;
import java.util.LinkedList;

public class ElementsAdapter extends     RecyclerView.Adapter<ElementsAdapter.ViewHolder> {
private Context mContext;
private LinkedList<Element> elements;
private boolean editing;
private CreateForm form;
private int initID;

public ElementsAdapter(CreateForm form, LinkedList<Element> elements, boolean editing){
    this.mContext = form.getApplicationContext();
    this.elements = elements;
    this.editing = editing;
    this.form = form;

    initID = 0;
    for(int i = 0; i < elements.size(); i++) if(elements.get(i).getID() > initID) initID = elements.get(i).getID();
}

public boolean isEditing() {
    return editing;
}

public int getInitID() {
    return initID;
}

public Element getElement(int position) {
    return elements.get(position);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.list_item_movie, parent, false));
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.bindMovie(elements.get(position));
}

public int getNewID() {
    int ID = -1;
    for(int i = 0; i < elements.size(); i++) if(elements.get(i).getID() > ID) ID = elements.get(i).getID();
    return ID + 1;
}

public void add(Element element, int ID) {
    element.setID(ID);
    elements.add(element);
    notifyDataSetChanged();
}

public void reAdd(Element e) {
    for(int i = 0; i < elements.size(); i++) {
        if(elements.get(i).getID() == e.getID()) {
            elements.remove(i);
            elements.add(i, e);
            break;
        }
    }
    notifyDataSetChanged();
}

public LinkedList<Element> getElements() {
    for(int i = 0; i < elements.size(); i++) elements.get(i).setPosition(i);
    return elements;
}

@Override
public int getItemCount() {
    return elements.size();
}

public void remove(final int position) {
    elements.remove(position);
    notifyItemRemoved(position);
}

public Context getContext() {
    return mContext;
}


public void swap(int firstPosition, int secondPosition){
    Collections.swap(elements, firstPosition, secondPosition);
    notifyItemMoved(firstPosition, secondPosition);
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public final TextView title;
    public final TextView subtitle;
    public Element e;

    public ViewHolder(View view){
        super(view);
        title = (TextView) view.findViewById(R.id.title);
        subtitle = (TextView) view.findViewById(R.id.subtitle);
    }

    public void bindMovie(Element element){
        e = element;
        this.title.setText(element.getTitle());
        this.subtitle.setText(element.getSubtitle());
        title.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        passEdit(e);
    }
}
private void passEdit(Element e) {
    form.passEdit(e);
}
}

package com.cpjd.roblu.forms;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;

import com.cpjd.roblu.R;
import com.cpjd.roblu.elements.ESTextfield;

public class ElementTouchHelper extends ItemTouchHelper.SimpleCallback {
private ElementsAdapter mElementsAdapter;

public ElementTouchHelper(ElementsAdapter elementsAdapter){
    super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
    this.mElementsAdapter = elementsAdapter;
}

@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
    mElementsAdapter.swap(viewHolder.getAdapterPosition(), target.getAdapterPosition());
    return true;
}

@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
    if(mElementsAdapter.isEditing() && mElementsAdapter.getElement(viewHolder.getAdapterPosition()).getID() <= mElementsAdapter.getInitID()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mElementsAdapter.getContext());

        builder.setTitle("Warning");
        builder.setMessage("Deleting this element will remove it and all its associated data from ALL team profiles.");

        builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mElementsAdapter.remove(viewHolder.getAdapterPosition());
                dialog.dismiss();
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mElementsAdapter.reAdd(mElementsAdapter.getElement(viewHolder.getAdapterPosition()));
            }
        });
        AlertDialog dialog = builder.create();
        dialog.getWindow().getAttributes().windowAnimations = R.style.dialog_animation;
        dialog.show();
    } else {
        mElementsAdapter.remove(viewHolder.getAdapterPosition());
    }
}
@Override
public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    if (mElementsAdapter.getElement(viewHolder.getAdapterPosition()) instanceof ESTextfield) return 0;
    return super.getSwipeDirs(recyclerView, viewHolder);
}
}

 RecyclerView movieRecyclerView = (RecyclerView) findViewById(R.id.movie_recycler_view);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    movieRecyclerView.setLayoutManager(linearLayoutManager);

    editing = getIntent().getBooleanExtra("editing", false);

    ArrayList<Element> elements = (ArrayList<Element>) getIntent().getSerializableExtra("elements");
    elementsAdapter = new ElementsAdapter(this, new LinkedList<>(elements), editing);
    movieRecyclerView.setAdapter(elementsAdapter);

    ItemTouchHelper.Callback callback = new ElementTouchHelper(elementsAdapter);
    ItemTouchHelper helper = new ItemTouchHelper(callback);
    helper.attachToRecyclerView(movieRecyclerView);

Reveal

0 个答案:

没有答案