2013-06-05 3 views
0

У меня есть ListView в одном xml, ссылающемся на TextView в другом xml. Я пытаюсь изменить цвет TextView, но это не работает. Если я не установлю 'setContentView' дважды, я получил исключение NullPointerException.Изменение цвета TextView в разных xml-файлах

setContentView(R.layout.text_list); 
      TextView textView = (TextView) findViewById(R.id.logText); 

      if (logLevel == "E"){ 
       textView.setTextColor(Color.parseColor("#FF4D4D")); 
      } 
      else if (logLevel == "W"){ 
       textView.setTextColor(Color.parseColor("#EAAB55")); 
      } 
      else if (logLevel == "I"){ 
       textView.setTextColor(Color.parseColor("#AFD778")); 
      } 
      else if (logLevel == "V"){ 
       textView.setTextColor(Color.parseColor("#OOOOOO")); 
      } 
      else { 
       textView.setTextColor(Color.parseColor("#AFD778")); 
      } 

      setContentView(R.layout.log_cat); 
      ListView lv1 = (ListView) findViewById(R.id.listView1); 

      ArrayAdapter<String> arrayAdapter = 
        new ArrayAdapter<String>(this, R.layout.text_list, log); 
+1

вы можете findviewbyid (инициализация представлений) текущей зрения иерархии, установленной в деятельности , если вы не инициализируете представления, вы получаете исключение nullpointer. – Raghunandan

+3

вы всегда будете входить в последнее. Строка в java должна быть сравнима с equals или eqaulsIgnoreCase – Blackbelt

+0

также с использованием setContentView (param); дважды. вы должны подумать о своем дизайне приложения – Raghunandan

ответ

1

// setContentView (parm) для двоих может вызвать проблемы. Так что если возникнет необходимость вид с другой макет, то просто надуть их

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.log_cat); 
     ListView lv1 = (ListView) findViewById(R.id.listView1); 

     CustomAdapter adapter = new CustomAdapter(this, "V"); 
      lv1 .setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 

} 

// пользовательский адаптер

public class CustomAdapter extends BaseAdapter { 

private Context ctx; 
private String logLevel; 

CustomAdapter (ArrayList<String> data, Context context, String log) 
{ 

    this.ctx = context; 
    this.logLevel = log; 
} 

@Override 
public int getCount() 
{ 
    list.size(); 

} 

@Override 
public Object getItem(int position) 
{ 
    return null; 
} 

@Override 
public long getItemId(int position) 
{ 
    return position ; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflator = (LayoutInflater)ctx.getSystemService(LAYOUT_INFLATER_SERVICE); 
    View v = inflator.inflate(R.layout.text_list, null); 

    TextView textView = (TextView) v.findViewById(R.id.logText); 

    if (logLevel == "E"){ 
     textView.setTextColor(Color.parseColor("#FF4D4D")); 
    } 
    else if (logLevel == "W"){ 
     textView.setTextColor(Color.parseColor("#EAAB55")); 
    } 
    else if (logLevel == "I"){ 
     textView.setTextColor(Color.parseColor("#AFD778")); 
    } 
    else if (logLevel == "V"){ 
     textView.setTextColor(Color.parseColor("#OOOOOO")); 
    } 
    else { 
     textView.setTextColor(Color.parseColor("#AFD778")); 

     textView.setTextColor(Color.BLUE); 
    } 
    return textView; 
    } 

}

+0

Текст по-прежнему всегда белый. Это то, что по умолчанию, потому что я не указывал цвет в TextView xml. Я убедился, что программа действительно входит в одно из операторов if. – ono

+0

Я думаю, что textView.setTextColor (Color.BLUE); будет работать и использовать условие logLevel как инициализировать значение logLevel. Вы не инициализировали значение logLevel logLevel.equalsIgnoreCase ("V"); –

+0

Еще ничего. Имеет ли значение, как я устанавливаю адаптер lv1.setAdapter (arrayAdapter); Я установил его после выбора цвета – ono

Смежные вопросы