我有Listview的通知,我想如果用户点击通知(特定行),它的颜色应该改变。 更改颜色意味着阅读通知。 即使应用程序重新启动,也应该反映更改的颜色。
为此,我已经在扩展数组适配器的类中编写了代码。
@Override
public View getView(int position, View v, ViewGroup parent)
{
View mView = v ;
if(mView == null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(id, null);
}
listView=(ListView)mView.findViewById(R.id.notiID);
String sd= yORn.get(position);
if(sd=="Y"){
listView.getChildAt(position).setBackgroundColor(Color.GREEN);
}
我也使用了调试器,我在if循环中得到条件,但我的问题是我没有得到lisview的改变颜色。 调试器没有在if循环中移动。
任何想法?
答案 0 :(得分:0)
您应该使用RecyclerView而不是Listview开始。在RecyclerView适配器中,检查onBindViewHolder中的位置,并相应地设置行的背景颜色。见下文。
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
if(position == 2){
holder.ll_item_background.setBackgroundColor(mContext.getResources().getColor(R.color.calc_boxes));
}
// Do your stuff here
}
答案 1 :(得分:0)
默认情况下,我将背景颜色设置为红色,如果用户读取,则背景颜色将根据您的预期更改为绿色。我编辑了你的代码。
@Override
public View getView(int position, View v, ViewGroup parent)
{
View mView = v ;
ViewHolder holder = null;
if(mView == null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(id, null);
holder.listItem = mView;
mView.setTag(holder);
}else{
holder = (ViewHolder)mView.getTag();
}
//By Default
holder.listItem.setBackgroundColor(Color.RED);
String sd= yORn.get(position);
if(sd.equals("Y")){
holder.listItem.setBackgroundColor(Color.GREEN);
}
}
class ViewHolder{
View listItem;
}
希望这有用:)
答案 2 :(得分:-1)
@Override
public View getView(int position, View v, ViewGroup parent)
{
View mView = v ;
ViewHolder holder = null;
if(mView == null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(id, null);
holder.listItem = mView;
mView.setTag(holder);
}else{
holder = (ViewHolder)mView.getTag();
}
String sd= yORn.get(position);
if(sd.equals("Y")){
holder.listItem.setBackgroundColor(Color.GREEN);
}
}
class ViewHolder{
View listItem;
}