2012-06-16 3 views
1

Я работаю над своим первым Android-приложением, и после прохождения многих ответов, уже размещенных здесь, они усовершенствовали мое понимание, но, похоже, не могут решить мою проблему.Как изменить цвет текста в ListView

Проще говоря, у меня есть ListView, и я хочу, чтобы текст в определенных строках отличался от других. Я пытаюсь сделать это, отбросив ListView.GetItemAtPosition до TextView и изменив цвет текста, но я получаю исключение кастинга.

Либо помогите мне понять ошибку в моем коде, либо предложить лучший способ получить высокую оценку!

public class MeetingManager extends Activity { 

public ListView mAgenda; 

//public Item agenda = new Item(); 
List<Item> agenda=new ArrayList<Item>(); 
ArrayAdapter<Item> adapter=null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.v(TAG, "Activity State: onCreate()"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.meeting); 

    // Obtain handles to UI objects 
    mAgenda = (ListView)findViewById(R.id.lstAgenda); 

    adapter=new ArrayAdapter<Item>(this, R.layout.agendalist, agenda); 
    mAgenda.setAdapter(adapter);   
    mAgenda.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    //Load items into agenda 
    initAgenda(); 
} 

protected void updateDetails() { 
    mRecipients.setText("This message will be sent to items " + (currentItemNum + 1) + " and later:"); 
    mSMS.setText(currentItem.getSMS()); 
} 

protected void initAgenda() { 
    currentItem = new Item(); 
    currentItem.setTitle("Reset Meeting"); 
    adapter.add(currentItem); 
    setColour(0, Color.RED); 
} 

public void setColour(int pos, int col) { 
    TextView tv = (TextView)mAgenda.getItemAtPosition(pos); //This is where the exception is thrown 
    tv.setTextColor(col); 
} 
} 

Ниже мой XML-код для ListView

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:paddingTop="2dip" 
    android:paddingBottom="3dip" 
    android:textSize="12pt" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

ответ

2

Вам необходимо создать собственный адаптер и использовать TextView.setTextColor(); в методе getView в зависимости от ваших критериев окраски.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) 
     convertView = View.inflate(context, layout, null); 
    View row = convertView; 

    TextView first = (TextView) convertView.findViewById(R.id.ListItem1); 
    TextView second = (TextView) convertView.findViewById(R.id.ListItem2); 
    if(condition == changecolor) { 
     first.setTextColor(#FFFF0000); 
     second.setTextColor(#FFFF0000); 
    } 
} 
0

вы можете создать подкласс ArrayAdapter и внутри подкласса метод GetView, вы можете выполнить волшебство

public View getView(int position, View convertView, ViewGroup parent) { 
    TextView tv = super.getView(position, convertView, parent); 

    if (position < 3) {  // I have just put dummy condition you can put your condition 
    textView.setTextColor(colors); // Here you can put your color 
    } else { 
    textView.setTextColor(colors); 
    } 
} 
Смежные вопросы