如何自定义listview行android

mad*_*erz 4 android listview

我有一个名单,我想根据名称开头的字母将颜色更改为行.这是我用来显示ListView的内容:

main.xml中

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<ListView android:id="@+id/listview"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" 
     />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

lisviewrows.xml

<?xml version="1.0" encoding="UTF-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</TextView>
Run Code Online (Sandbox Code Playgroud)

main.java

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        List<String> words = populateList();
        List<String> l = removeDoubles(words);
        Collections.sort(l);

        ListView lv = (ListView)findViewById(R.id.listview);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.listviewrows, l);

        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

您可以提供一些有用的链接或一些示例吗?

谢谢!!

nba*_*lle 14

为此,您需要创建自己的自定义适配器.在getView方法(返回要为每个列表项显示的视图)中,将所需的颜色应用于TextView的背景.关于customAdapters的一个很酷的事情是,你可以做任何事情,并为列表项显示更复杂的视图,因为你不再受限于TextViews,你可以将列表项XML布局更改为任何类型的视图/布局.. .

像这样的东西:

MyAdapter.java

public class MyAdapter extends BaseAdapter{
    private LayoutInflater inflater;
    private ArrayList<String> data;

    public MyAdapter(Context context, ArrayList<String> data){
    // Caches the LayoutInflater for quicker use
    this.inflater = LayoutInflater.from(context);
    // Sets the events data
    this.data= data;
    }

    public int getCount() {
        return this.data.size();
    }

    public String getItem(int position) throws IndexOutOfBoundsException{
        return this.data.get(position);
    }

    public long getItemId(int position) throws IndexOutOfBoundsException{
        if(position < getCount() && position >= 0 ){
            return position;
        }
    }

    public int getViewTypeCount(){
        return 1;
    }

    public View getView(int position, View convertView, ViewGroup parent){
        String myText = getItem(position);           

        if(convertView == null){ // If the View is not cached
            // Inflates the Common View from XML file
            convertView = this.inflater.inflate(R.id.my_row_layout, null);
        }

        // Select your color and apply it to your textview
        int myColor;
        if(myText.substring(0, 1) == "a"){
            myColor = Color.BLACK;
        }else{
        ....
        }

        convertView.findViewById(R.id.myTextViewId).setBackground(myColor);
        // Of course you will need to set the same ID in your item list XML layout.

        return convertView;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中设置适配器,如下所示:

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        List<String> words = populateList();
        List<String> l = removeDoubles(words);
        Collections.sort(l);

        ListView lv = (ListView)findViewById(R.id.listview);

        MyAdapter adapter = new MyAdapter(getApplicationContext(), l);

        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)