Выбираемый RecyclerView во фрагменте - PullRequest
0 голосов
/ 16 ноября 2018

Мой английский не самый лучший, но я надеюсь, вы понимаете, я новичок в разработке приложений для Android, и на данный момент у меня есть представление о переработчике, которое заполнено WebService, я пытаюсь сделать эти предметы могут быть выбраны, на данный момент я пробовал:

С flexibleAdapter у меня есть Предмет и Фрагмент, но он не работает вообще. со вторым, я пробовал с другим фрагментом, и он может прослушивать щелчки, но есть слушатель, который используется для запуска режима выбора, и этот режим выбора управляется в активном режиме, и этот режим действия не работает Су, не знаю, что делать сейчас

Это мой код с "FlexibleAdapter". Мой объект "Предмет"

public class TrazaFlex extends AbstractFlexibleItem<TrazaFlex.ViewHolderTrazaFlex> {
   public TrazaFlex(){

    }

...
...
   @Override
    public void bindViewHolder(FlexibleAdapter<IFlexible> adapter, ViewHolderTrazaFlex holder, int position, List<Object> payloads) {
        holder.mTitle.setText(nombreTraza);
        // Title appears disabled if item is disabled
        holder.mTitle.setEnabled(isEnabled());

        Context context = holder.itemView.getContext();
        Drawable drawable = DrawableUtils.getSelectableBackgroundCompat(
                Color.WHITE, Color.parseColor("#dddddd"), // Same color of divider
                DrawableUtils.getColorControlHighlight(context));
        DrawableUtils.setBackgroundCompat(holder.itemView, drawable);
    }

   public class ViewHolderTrazaFlex extends FlexibleViewHolder {
        public TextView mTitle;

        public ViewHolderTrazaFlex(View view, FlexibleAdapter adapter) {
            super(view, adapter);
            mTitle = (TextView) view.findViewById(R.id.id_nombre_traza);
        }
    }

А это мой фрагмент:

public class TrazaFragment extends Fragment implements ActionMode.Callback, FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener {

    ArrayList<Traza> listaTrazas;
    RecyclerView recyclerTrazas;
    View vista;

    private FlexibleAdapter mAdapter;
    private ActionMode mActionMode;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getActivity().setTitle("Trazas");
        vista = inflater.inflate(R.layout.fragment_traza, container, false);
        listaTrazas = new ArrayList<>();
        recyclerTrazas = (RecyclerView) vista.findViewById(R.id.recyclerTrazas);
        recyclerTrazas.setLayoutManager(new LinearLayoutManager(getContext()));

        GetTrazas mAttempTraza = new GetTrazas();
        mAttempTraza.execute((Void) null);

        return vista;
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        mode.getMenuInflater().inflate(R.menu.selected_menu, menu);
        mAdapter.setMode(Mode.MULTI);
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mAdapter.setMode(Mode.IDLE);
        mActionMode = null;
    }

    @Override
    public boolean onItemClick(View view, int position) {
        if (mActionMode != null && position != RecyclerView.NO_POSITION) {
            // Mark the position selected
            toggleSelection(position);
            Toast.makeText(getContext(),"OnItemLongClick ", Toast.LENGTH_LONG).show();
            return true;
        } else {
            Toast.makeText(getContext(),"OnItemLongClick ", Toast.LENGTH_LONG).show();
            // Handle the item click listener
            // We don't need to activate anything
            return false;
        }
    }

    @Override
    public void onItemLongClick(int position) {
        if (mActionMode == null) {
            getActivity().startActionMode(this);
        }
        Toast.makeText(getContext(),"OnItemLongClick ", Toast.LENGTH_LONG).show();
        toggleSelection(position);
    }

    /**
     * Toggle the selection state of an item.
     * If the item was the last one in the selection and is unselected, the ActionMode
     * is stopped.
     */
    private void toggleSelection(int position) {
        // Mark the position selected
        mAdapter.toggleSelection(position);

        int count = mAdapter.getSelectedItemCount();

        if (count == 0) {
            mActionMode.finish();
        } else {
            setContextTitle(count);
        }
    }
    private void setContextTitle(int count) {
        mActionMode.setTitle(String.valueOf(count) + " " + (count == 1 ?
                "Action Selected One" :
                "Action Selected Many"+count));
    }


    public class GetTrazas extends AsyncTask<Void, Void, Boolean> {
      //connects to service and get json
            return null;
        }
        @Override
        protected void onPostExecute(final Boolean success) {


            recyclerTrazas = (RecyclerView) vista.findViewById(R.id.recyclerTrazas);
////            recyclerTrazas.setLayoutManager(new LinearLayoutManager(getContext()));
            List<IFlexible> listaTrazasFlex = getDatabaseList();
            FlexibleAdapter<IFlexible> adapterFlexTraza = new FlexibleAdapter<>(listaTrazasFlex);
            recyclerTrazas.setAdapter(adapterFlexTraza);

        }
        public List<IFlexible> getDatabaseList() {
            //connects to json and returns a list

                }
            }
            catch (JSONException e) {

            }
            return list;
        }
    }

}
  • Может ли ActionMode использоваться только в активности?
  • Где и как я могу настроить прослушиватель для адаптера, чтобы сделать элементы активируемыми
  • Может ли кто-нибудь объяснить мне, как он работает в окне рециркулятора во фрагменте и как работает панель режимов действий вверху при запуске режима выбора
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...