在回收视图中,我想要做的是,当我长按选择项目时,应该在已经设置为0.00的textview中添加该项目(回收视图中值的总和),而当我取消选择该项目时, recycleview应该是textview的minue(减去)。...
长按第一次选择回收视图的项目,然后单击一次...
我尝试过,但最终我在textview中添加了所有值...
MainActivity
public class MainActivity extends AppCompatActivity implements RecyclerViewAdapter.ClickAdapterListener {
Menu context_menu;
RecyclerView recyclerView;
TextView textView,txtdata;
LinearLayoutManager layoutManager;
ArrayList<Model> dataModel;
RecyclerViewAdapter mAdapter;
private ActionModeCallback actionModeCallback;
private ActionMode actionMode;
FloatingActionButton fab;
android.view.ActionMode mActionMode;
Button sortBtn;
private SortedList<String> model=null;
private boolean ascending = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
txtdata = (TextView)findViewById(R.id.txtdata);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fab.setVisibility(GONE);
populateDataAndSetAdapter();
}
});
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
actionModeCallback = new ActionModeCallback();
populateDataAndSetAdapter();
}
@Override
public void onMessageRowClicked(int position) {
if (mAdapter.getSelectedItemCount() > 0) {
enableActionMode(position);
Double carat = Double.valueOf(((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.textView)).getText().toString());
Double data = Double.valueOf(txtdata.getText().toString());
Double sum = carat + data;
txtdata.setText(Double.toString(sum));
} else {
Model message = dataModel.get(position);
dataModel.set(position, message);
mAdapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "Read: " + message.getText(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRowLongClicked(int position) {
enableActionMode(position);
Double carat = Double.valueOf(((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.textView)).getText().toString());
Double data = Double.valueOf(txtdata.getText().toString());
Double sum = carat + data;
txtdata.setText(Double.toString(sum));
}
private void enableActionMode(int position) {
if (actionMode == null) {
actionMode = startSupportActionMode(actionModeCallback);
}
toggleSelection(position);
}
private void toggleSelection(int position) {
mAdapter.toggleSelection(position);
int count = mAdapter.getSelectedItemCount();
if (count == 0) {
actionMode.finish();
actionMode = null;
} else {
actionMode.setTitle(String.valueOf(count));
actionMode.invalidate();
}
}
private void updateCABTitle() {
String title = getString(R.string.selected_count, mAdapter.getSelectedItemCount());
actionMode.setTitle(title);
}
private void myCheckAll(boolean isCheck) {
mAdapter.doActionOnAll(isCheck);
updateCABTitle();
}
private void populateDataAndSetAdapter() {
dataModel = new ArrayList<>();
dataModel.add(new Model("1.00", false));
dataModel.add(new Model("3.50", false));
dataModel.add(new Model("2.00", false));
dataModel.add(new Model("5.50", false));
dataModel.add(new Model("4", false));
dataModel.add(new Model("6", false));
dataModel.add(new Model("7", false));
dataModel.add(new Model("8", false));
dataModel.add(new Model("9", false));
dataModel.add(new Model("10", false));
dataModel.add(new Model("11", false));
dataModel.add(new Model("12", false));
mAdapter = new RecyclerViewAdapter(this, dataModel, this);
recyclerView.setAdapter(mAdapter);
}
}
RecycleViewAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context mContext;
List<Model> modelList;
private ClickAdapterListener listener;
private SparseBooleanArray selectedItems;
private static int currentSelectedIndex = -1;
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener{
public TextView textView;
public RelativeLayout relativeLayout;
RecyclerView recyclerView;
TextView txtdata;
public MyViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.textView);
txtdata = (TextView) view.findViewById(R.id.txtdata);
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout);
view.setOnLongClickListener(this);
}
@Override
public boolean onLongClick(View view) {
listener.onRowLongClicked(getAdapterPosition());
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
return true;
}
}
public RecyclerViewAdapter(Context mContext, List<Model> modelList, ClickAdapterListener listener) {
this.mContext = mContext;
this.modelList = modelList;
this.listener = listener;
selectedItems = new SparseBooleanArray();
}
public void doActionOnAll(boolean action) {
clearSelections();
for (int i = 0; i < modelList.size(); i++) {
if (selectedItems.get(i, action))
toggleSelection(i);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recyclerview_list_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
String text = modelList.get(position).text;
holder.textView.setText(text);
if (modelList.get(position).colored)
holder.textView.setTextColor(mContext.getResources().getColor(android.R.color.holo_red_dark));
holder.itemView.setActivated(selectedItems.get(position, false));
applyClickEvents(holder, position,false);
}
private void applyClickEvents(MyViewHolder holder, final int position,boolean isSelected) {
holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onMessageRowClicked(position);
}
});
holder.relativeLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
listener.onRowLongClicked(position);
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
return true;
}
});
}
@Override
public int getItemCount() {
return modelList.size();
}
public void toggleSelection(int pos) {
currentSelectedIndex = pos;
if (selectedItems.get(pos, false)) {
selectedItems.delete(pos);
} else {
selectedItems.put(pos, true);
}
notifyItemChanged(pos);
}
public void clearSelections() {
selectedItems.clear();
notifyDataSetChanged();
}
public int getSelectedItemCount() {
return selectedItems.size();
}
public List<Integer> getSelectedItems() {
List<Integer> items =
new ArrayList<>(selectedItems.size());
for (int i = 0; i < selectedItems.size(); i++) {
items.add(selectedItems.keyAt(i));
}
return items;
}
private void resetCurrentIndex() {
currentSelectedIndex = -1;
}
public interface ClickAdapterListener {
void onMessageRowClicked(int position);
void onRowLongClicked(int position);
}
}
模型
public class Model {
String text;
boolean colored;
public Model(String text, boolean colored) {
this.text = text;
this.colored = colored;
}
public String getText() {
return text;
}
public boolean isColored() {
return colored;
}
public void setText(String text) {
this.text = text;
}
public void setColored(boolean colored) {
this.colored = colored;
}
}