2016-10-17 2 views
0

Я использую AlertDialog для отображения некоторой информации об отладке. У меня просто есть список, в который я отправляю информацию. Чтобы сделать его более читаемым, я хотел бы изменить цвет фона отдельных элементов в списке на основе их типа. К сожалению, я не могу получить цвет, который я хочу удержать. Вот Вид адаптера я использую:Изменение цвета фона Android при использовании адаптера в AlertDialog

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 
    TextView tv = (TextView) v.findViewById(android.R.id.text1); 
    RuleDebugItem item = mData.get(position); 

    tv.setSingleLine(false); 
    if(item.type.equalsIgnoreCase(Field.VARIABLE)) { 
     tv.setText(item.ruleDebugText); 
     tv.setTextSize(18); 
     v.setBackgroundColor(color.bluelight); 
     tv.setTypeface(null, Typeface.BOLD); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)); 
    } 
    else if (item.type.equalsIgnoreCase(Field.FUNCTION)) { 
     tv.setText(item.ruleDebugText); 
     tv.setTextSize(16); 
     v.setBackgroundColor(color.greenlight); 
     tv.setTypeface(null, Typeface.BOLD); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)); 
    } 
    else if (item.type.equals("Condition")) { 
     tv.setText(" " + item.ruleDebugText); 
     tv.setTextSize(14); 
     tv.setTypeface(null, Typeface.NORMAL); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black)); 
    } 
    return v; 
} 

Я ожидал v.setBackgroundColor(color.greenlight); изменить цвет Backround. Полагаю, я мог бы создать свой собственный диалог и т. Д., Но я действительно не хотел тратить много времени на это, потому что это, вероятно, код сбрасывания.

спасибо!

+0

вы можете изменить это в методе onBindViewHolder, который может быть легко управляемым –

+0

@Selvin Как заявить, выбросить код и незавершенное производство. Состояние (и другие предметы) будет добавлено позже. Если вы уже решили использовать ArrayAdpater и AlertDialog, пришлите мне ссылку. Благодарю. –

+0

Rahul - ArrayAdapter, похоже, не имеет метода onBindViewHolder. Или я предлагаю сделать что-то другое? –

ответ

0

Таким образом, ответ был не совсем тем, что я ожидал. Оказывается, AlertDialog не принимал стандартные цвета, а скорее требовал их от стилей Android. Не уверен, что это было связано с тем, что кто-то настраивал стили на нашей стороне (возможно, так как я не писал базовый код), или если это характер AlertDialog. Так что если кто-то сталкивается с этим, вот окончательным код (обратите внимание, что это только холостая отладку кода, он не оптимизирован):

public class RuleDebugItemAdapter extends ArrayAdapter<RuleDebugItem> { 
Context mContext; 
int mLayoutResourceId;  
ArrayList<RuleDebugItem> mData; 

public RuleDebugItemAdapter(Context context, int resource, ArrayList<RuleDebugItem> data) { 
    super(context, resource, data); 
    mContext = context; 
    mLayoutResourceId = resource; 
    mData = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = super.getView(position, convertView, parent); 
    TextView tv = (TextView) v.findViewById(android.R.id.text1); 
    RuleDebugItem item = mData.get(position); 

    tv.setSingleLine(false); 
    if (item.type.equalsIgnoreCase(Field.VARIABLE)) { 
     tv.setText(item.ruleDebugText); 
     tv.setTextSize(18); 
     tv.setTypeface(null, Typeface.BOLD); 
     v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.white)); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black)); 
    } 
    else if (item.type.equalsIgnoreCase(Field.FORMRULE)) { 
     tv.setText(item.ruleDebugText); 
     tv.setTextSize(18); 
     tv.setTypeface(null, Typeface.BOLD); 
     v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.white)); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.black)); 
    } 
    else if (item.type.equalsIgnoreCase(Field.FUNCTION)) { 

     tv.setTextSize(16); 
     if (item.success) { 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light)); 
      tv.setText(Field.SPACE + item.ruleDebugText); 
     } 
     else { 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_blue_bright)); 
      tv.setText("Init " + item.ruleDebugText); 
     } 

     tv.setTypeface(null, Typeface.BOLD); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)); 
    } 
    else if (item.type.equalsIgnoreCase(Field.ACTION)) { 

     tv.setTextSize(16); 
     if (item.success) { 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light)); 
      tv.setText(Field.SPACE + item.ruleDebugText); 
     } 
     else { 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_blue_bright)); 
      tv.setText("Pre-" + item.ruleDebugText); 
     } 

     tv.setTypeface(null, Typeface.BOLD); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)); 
    } 
    else if (item.type.equals(Field.CONDITION)) { 
     tv.setText(item.ruleDebugText); 
     tv.setTextSize(16); 
     tv.setTypeface(null, Typeface.NORMAL); 
     if (item.success) 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_green_light)); 
     else 
      v.setBackgroundColor(ContextCompat.getColor(mContext,android.R.color.holo_red_light)); 
     tv.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)); 
    } 
    return v; 
} 
}