Изменить цветовой эффект фона в держателе элемента - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть видоискатель, чтобы показать список элементов. Поэтому, когда я нажимаю на элемент, я хочу изменить цвет фона этого элемента. И когда я убираю флажок с этого элемента, я хочу вернуться к цвету фона по умолчанию (белый).

Я попробовал следующий код, но у него есть две проблемы:

1 - Когда я не нажимаю на элемент, он остается тем же цветом (серый).

2- Когда я щелкаю по предмету и выполняю два других действия, когда я возвращаюсь назад, этот Предмет сохраняет тот же цвет (серый), и я этого не хочу. Он должен быть белого цвета (цвет по умолчанию).

public class ArtistListAdapter extends RecyclerView.Adapter<ArtistListAdapter.ItemViewHolder> {

    // Vars
    private List<Artist> artists;
    private SearchArtistListener artistListenerAdapter;

    /************** Members **************/
    public ArtistListAdapter(List<Artist> artists, SearchArtistListener adapterListener) {
        this.artists = artists;
        this.artistListenerAdapter = adapterListener;
    }

    /************** Callbacks **************/
    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
        View view = layoutInflater.inflate(R.layout.item_lista_busca, viewGroup, false);
        return (new ItemViewHolder(view, artistListenerAdapter));
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder itemViewHolder, int i) {
        itemViewHolder.fillFields(artists.get(i));
    }

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

    /************** Interfaces/Classes **************/
    public final static class ItemViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener, View.OnTouchListener {

        // Vars
        private SearchArtistListener viewHolderListener;

        // Views
        private ImageView    imgImageView;
        private LinearLayout lnLinearLayout;
        private TextView     subtitleTextView, titleTextView;

        /************** Members **************/
        public ItemViewHolder(@NonNull View itemView, SearchArtistListener viewHolderListener) {
            super(itemView);

            this.viewHolderListener = viewHolderListener;

            imgImageView   = itemView.findViewById(R.id.item_lista_busca_iv_imagem);
            subtitleTextView = itemView.findViewById(R.id.item_lista_busca_tv_subtitulo);
            titleTextView    = itemView.findViewById(R.id.item_lista_busca_tv_titulo);
            lnLinearLayout = itemView.findViewById(R.id.item_lista_busca_ll);

            itemView.setOnClickListener(this);
            lnLinearLayout.setOnTouchListener(this);
        }

        private void fillFields(Artist artist) {
            lnLinearLayout.setBackgroundColor(Color.WHITE);

            Picasso.with(itemView.getContext()).load(artist.getPictureSmall()).into(imgImageView);
            titleTextView.setText(artist.getName());
            subtitleTextView.setText("Artist");
        }

        /************** Callbacks **************/
        @Override
        public void onClick(View v) {
            if(viewHolderListener != null){
                viewHolderListener.onArtistaItemClick(getAdapterPosition());
            }
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if((event.getAction()) == (MotionEvent.ACTION_DOWN))
                v.setBackgroundColor(Color.GRAY);
            else if((event.getAction()) == (MotionEvent.ACTION_UP))
                v.setBackgroundColor(Color.WHITE);

            return false;
        }
    }

    /**************** Classes - Interfaces ****************/
    public interface SearchArtistListener {
        void onArtistaItemClick(int position);
    }
}

1 Ответ

0 голосов
/ 18 ноября 2018

используйте следующие коды, чтобы преодолеть обе ваши проблемы

я использовал фиктивные коды для объяснения подхода

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

public class TestActivity extends AppCompatActivity {

private RecyclerViewAdapter recyclerViewAdapter;

private OnActivityRefresh onActivityRefresh;

public void setOnActivityRefresh(OnActivityRefresh onActivityRefresh) {
    this.onActivityRefresh = onActivityRefresh;
}

@Override
protected void onResume() {
    super.onResume();

    if(onActivityRefresh != null){
        onActivityRefresh.onRefresh();
    }

}

private void refreshRecyclerview() {

}

public interface OnActivityRefresh{
    void onRefresh();
}

}

.здесь я использовал ту же активность, что и аргумент в конструкторе, и установил интерфейс, который, наконец, запускает функцию обновления при возобновлении активности

. Более того, я создал эффект переключения, просто используя простой приемник щелчков на макете двигателя

здесь макет матери - макет матери ребенка

надеюсь, вы понимаете

я тороплюсь, так что извините за мои орфографические ошибки;)

public class TestViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

private LinearLayout mother_layout;
private boolean isViewSelected = false;

public TestViewHolder(View itemView) {
    super(itemView);
    initViews(itemView);
}

private void initViews(View v){
    mother_layout = (LinearLayout)v.findViewById(R.id.mother_layout);
}

public void init(Activity activity){
    ((TestActivity)activity).setOnActivityRefresh(new TestActivity.OnActivityRefresh() {
        @Override
        public void onRefresh() {
            isViewSelected = false;
            setDefaultColor();
        }
    });
}

@Override
public void onClick(View view) {
    if(view == mother_layout){
        if(isViewSelected){
            isViewSelected = false;
            setDefaultColor();
        }else{
            isViewSelected = true;
            setActiveColor();
        }
    }
}

private void setActiveColor() {

}

private void setDefaultColor() {

}

}

надеюсь, это поможет

счастливое кодирование;)

Леме, если есть какая-то проблема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...