2016-11-13 112 views
0

我工作Recyclerview.I有一個複選框,併成功地在我的項目background.This更改背景顏色是我的適配器代碼:Recyclerview變化項目由顏色位置在Android中

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { 

private List<VinLoadModel> moviesList; 

private int activeColor=Color.parseColor("#c6ffc6"); 
private int passivecolor=Color.parseColor("#ffc6c6"); 
private onClickListener onClickListener; 
private int selectedPosition; 

public RecyclerViewAdapter.onClickListener getOnClickListener() { 
    return onClickListener; 
} 

public void setOnClickListener(RecyclerViewAdapter.onClickListener onClickListener) { 
    this.onClickListener = onClickListener; 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView vin, polygon; 
    public LinearLayout linearLayout; 
    public CheckBox checkBox; 
    public Button info; 

    public MyViewHolder(View view) { 
     super(view); 
     vin = (TextView) view.findViewById(R.id.vin_code); 
     polygon = (TextView) view.findViewById(R.id.polygon_name); 
     linearLayout = (LinearLayout) view.findViewById(R.id.mainLayout); 
     info=(Button)view.findViewById(R.id.info_click); 
     checkBox = (CheckBox) view.findViewById(R.id.checkBox); 

    } 
} 


public RecyclerViewAdapter(List<VinLoadModel> moviesList,int selectedPosition) { 
    this.moviesList = moviesList; 
    this.selectedPosition=selectedPosition; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.vin_load_item_adapter, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) { 
    VinLoadModel movie = moviesList.get(position); 
    holder.vin.setText(movie.getVin()); 
    holder.info.setText("i".toLowerCase()); 
    holder.polygon.setText(movie.getPolygon()); 
    if(selectedPosition==position) 
     holder.linearLayout.setBackgroundColor(activeColor); 


    holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked) 
      { 
       moviesList.get(position).setColorChanged(true); 
       holder.linearLayout.setBackgroundColor(activeColor); 

      } 
      else 
      { 
       moviesList.get(position).setColorChanged(false); 

       holder.linearLayout.setBackgroundColor(passivecolor); 

      } 

     } 
    }); 
    holder.info.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(onClickListener!=null) 
       onClickListener.onClick(position); 
     } 
    }); 

} 

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

public interface onClickListener 
{ 
    void onClick(int position); 
} 

現在我想改變項目背景顏色的Position.I寫了addOnItemTouchListener方法,但我有兩個問題。 當我使用這種方法,複選框偵聽器不working.is它可能工作兩種方法? 和第二的疑難問題。例如可以冷杉元素的背景顏色改變,但是當我點擊第二個要素,第一要素的背景顏色是默認的(白色)

customListview.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), customListview, new RecyclerTouchListener.ClickListener() { 
            @Override 
            public void onClick(View view, int position) { 
             vinLoadAdapter = new RecyclerViewAdapter(vinLoadModels,position); 
             customListview.setAdapter(vinLoadAdapter); 


            } 

            @Override 
            public void onLongClick(View view, int position) { 

            } 
           })); 

我想,如果我改變首先改變背景顏色然後點擊第二項,第一個背景顏色也改變了(不是默認白色) 我怎麼能解決我的問題? 感謝大家

回答

0

ü需要使用調色板

使用異步ListView中適配器

Palette.from(bitmap).maximumColorCount(numberOfColors).generate(new Palette.PaletteAsyncListener() { 
    @Override 
    public void onGenerated(Palette palette) { 
     // Get the "vibrant" color swatch based on the bitmap 
     Palette.Swatch vibrant = palette.getVibrantSwatch(); 
      if (vibrant != null) { 
       // Set the background color of a layout based on the vibrant color 
       containerView.setBackgroundColor(vibrant.getRgb()); 
       // Update the title TextView with the proper text color 
       titleView.setTextColor(vibrant.getTitleTextColor()); 
      } 
    } 
}); 

這段代碼會產生調色板顏色異步ADNü可以使用它的適配器 Dyanamic colors using Color Palette

相關問題