我有一个观察者来显示项目列表。因此,当我单击一个项目时,我想更改该项目的背景颜色。当我取消单击该元素时,我想回到默认的背景颜色(白色)。
我尝试了以下代码,但是有两个问题:
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);
}
}
答案 0 :(得分:0)
使用以下代码来解决您的两个问题
我用伪代码来解释这种方法
以下是与您的回收者意见相关的活动 只需创建一个接口并在简历上实现其方法 并在您的视口中使用该界面 这样,当活动恢复时,它将实现该功能并将颜色恢复为默认值
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();
}
}
现在这是典型的视图持有人 在这里,我使用了与构造函数中的参数相同的活动,并设置了接口 最终在活动恢复上运行刷新功能
此外,我仅通过在Moter布局上使用简单的点击侦听器就获得了太棒的效果
这里的母亲布局是孩子的母亲布局
希望您能理解
我急着想念我的拼写错误;)
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() {
}
}
希望有帮助
快乐编码;)
我知道是否有问题