Java 回收查看项目增值

Java 回收查看项目增值,java,android,Java,Android,在循环视图中,我想做的是,当我长按选择项目时,该项目应在文本视图中添加(循环视图中的值之和),该文本视图已设置为0.00,当我取消选择该项目时,循环视图的值应为分钟(减去)文本视图的值 长按第一次选择的回收视图项目,然后单击 我试过了,但最终在textview中实现了所有增值 main活动 public class MainActivity extends AppCompatActivity implements RecyclerViewAdapter.ClickAdapterListener

在循环视图中,我想做的是,当我长按选择项目时,该项目应在文本视图中添加(循环视图中的值之和),该文本视图已设置为0.00,当我取消选择该项目时,循环视图的值应为分钟(减去)文本视图的值

长按第一次选择的回收视图项目,然后单击

我试过了,但最终在textview中实现了所有增值

main活动

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

不要在onBindViewHolder中设置onClickListeners,这对性能有害。此外,在同一对象上重复单击侦听器时,您也有一些混乱WRT设置。您只需将ClickAdapterListener传递给holder,然后将ClickListener绑定到那里。您可能需要通过关闭或设置将位置传递给持有者我是android新手。。。因此,如果您用一些代码片段进行解释,我将不胜感激。。
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;
    }
}