2011-06-29 68 views
1

我希望通過ListActivity顯示的列表中的所有項目都是不同的顏色(請不要評論糟糕的圖形設計;我正在嘗試創建演示)。控制ListActivity中的單個視圖

顯示ListActivity很簡單。但是,我從閱讀其他問題看到,您無法遍歷ListView。那麼,如何控制TextView的單個列表條目呢?

這是我的示例程序;註釋掉的區域顯示不起作用的代碼。

package com.explorenm.colorlist; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class ColorList extends ListActivity { 
    private static final String colors[] = { 
     "red", "green", "blue", "cyan", "magenta", 
     "yellow", "black", "white" 
    }; 
    private static final int colorvalues[] = { 
     // red, green, blue,  cyan,  
     0xFF0000, 0x00FF00, 0x0000FF, 0x00FFFF, 
     // magenta, yellow, black, white 
     0xFF00FF, 0xFFFF00, 0x000000, 0xFFFFFF 
    }; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    TextView tv = null; 
    super.onCreate(savedInstanceState); 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.listitem, colors)); 
    ListView lv = getListView(); 
// for (int i=0; i<colors.length; i++) { 
//  tv = (TextView) lv.getItemAtPosition(i); // lv.getChildAt(i) also fails 
//  tv.setBackgroundColor(colorvalues[i]); 
// } 
    } 
} 

回答

2

您可以實現自己的ListAdapter(或者更具體地說,延長ArrayAdapter<String>),並覆蓋getView(int position, View convertView, ViewGroup parent)方法。這使您可以自己構建單個列表項目的視圖,因此您可以按照自己的需要進行操作。

public class MyAdapter extends ArrayAdapter<String> 
    public View getView(final int position, View convertView, final ViewGroup parent) 
    { 
     View v = convertView; 
     if(v == null) 
     { 
      LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = li.inflate(R.layout.listitem, null); 
     } 
     String getItem = getItem(position); 
     // Style the item and set the text here 
    } 
} 

這是值得指出的是,你應該總是嘗試和重新使用convertView參數,而不是每次調用此方法時膨脹的新觀點。這樣做的原因是充氣視圖費錢,而這樣做不必要地會影響到你的相當大的平滑滾動。

0

希望這將有助於..

MyList.class

public class MyList extends Activity implements OnItemClickListener { 

private List<String> strings = new ArrayList<String>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    strings.add("Android"); 
    ListView listView = (ListView) findViewById(R.id.list); 
    listView.setAdapter(new MyArrayAdatpter(getApplicationContext(), 0, 
      strings)); 
    listView.setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    Toast.makeText(getApplicationContext(), strings.get(arg2)+" at position-"+arg2, 
      Toast.LENGTH_SHORT).show(); 
} 
} 

定製ArrayAdapter

public class MyArrayAdatpter extends ArrayAdapter<String>{ 

private List<String> list=new ArrayList<String>(); 
private Context context; 
private int randomColour; 
private static final int colorvalues[] = { 
    // red, green, blue,  cyan,  
    Color.RED, Color.GREEN, Color.BLUE, Color.CYAN, 
    // magenta, yellow, black, white 
    Color.MAGENTA, Color.YELLOW, Color.BLACK, Color.WHITE 
}; 
public MyArratAdatpter(Context applicationContext, int i, List<String> strings) { 
    super(applicationContext,i); 
    this.context=applicationContext; 
    list=strings; 
} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return list.size(); 
} 

@Override 
public String getItem(int position) { 
    // TODO Auto-generated method stub 
    return list.get(position); 
} 
@Override 
public int getPosition(String item) { 
    // TODO Auto-generated method stub 
    return list.indexOf(item); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view=LayoutInflater.from(context).inflate(R.layout.textlayout,null); 
    TextView textView=(TextView)view.findViewById(R.id.text); 
    textView.setText(list.get(position)); 
    randomColour = new Random().nextInt(7); 
    textView.setTextColor(colorvalues[randomColour]); 
    return view; 
} 
} 
+0

這使我的解決方案。謝謝! – Kenneth

相關問題