2013-06-05 4 views
0

다른 XML의 TextView를 참조하는 하나의 XML에 ListView가 있습니다. TextView의 색상을 변경하려고하지만 작동하지 않는 것 같습니다. 'setContentView'를 두 번 설정하지 않으면 NullPointerException이 발생합니다. 두 번 문제가 발생할 수 있습니다에 대한다른 XML 파일의 TextView 색상 변경

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

활동에 설정된 현재 뷰 계층의 (의견을 초기화) 어댑터 . 뷰를 초기화하지 않으면 nullpointer 예외가 발생합니다. – Raghunandan

+3

당신은 항상 마지막으로 int를 얻을 것입니다. 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; 
    } 

가} 당신은 findViewById를 할 수

+0

텍스트는 항상 흰색입니다. TextView xml에서 색상을 지정하지 않았기 때문에 기본값이 무엇입니까? 프로그램이 if 문 중 하나에 실제로 들어가는 지 확인했습니다. – ono

+0

나는 생각 textView.setTextColor (Color.BLUE); logLevel 조건을 사용하고 으로 logLevel 값을 초기화합니다. logLevel 값을 초기화하지 않았습니다. logLevel.equalsIgnoreCase ("V"); –

+0

아직 없습니다. 어떻게 어댑터 lv1.setAdapter (arrayAdapter); 색상을 선택한 후 설정했습니다. – ono