所以我有一个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);