2013-06-05 25 views
0

我在一个xml中引用了另一个xml中的T​​extView中的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

可以findviewbyid(初始化视图)设置为活动当前视图层次。如果你不初始化视图,你会得到空指针异常。 – Raghunandan

+3

你总是会得到最后一个int。在java中的字符串必须与equals或eqaulsIgnoreCase – Blackbelt

+0

同样使用setContentView(param);两次。你应该重新考虑你的应用程序设计 – Raghunandan

回答

1

// setContentView(parm)for twice may cause problem。所以,如果有需要从不同的布局视图,然后简单地夸大他们

@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