2

我有一个 Activity extends ListActivity

ListView 使用默认主题的颜色。如何将我自己的颜色状态列表资源设置为 ListView?

我试过这个onCreate()

getListView().setBackgroundResource(R.drawable.background_listview);

这是 background_listview

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ff000000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff000000"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

但我只得到错误

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag
requires a 'drawable' attribute or child tag defining a drawable.
4

2 回答 2

2

您必须创建自己的自定义适配器,该适配器将从 ListAdapter 扩展,并在覆盖的 getView() 方法中为每个列表项膨胀您的自定义布局。在此布局中,您应该将选择器设置为背景。实际上你的选择器看起来不错。

UDPATE:

看看这个简单的代码:

活动:

public class YourActivity extends Activity {
    private CustomAdapter customAdapter;
    private ArrayList<ExampleObject> listObjects;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);

        listView = (ListView) findViewById(R.id.activity_listview);
        listObjects = new ArrayList<ExampleObjects>();
        customAdapter = new CustomAdapter(this, R.layout.list_item, listObjects);
        listView.setAdapter(customAdapter);
    }

适配器:

public class CustomAdapter extends ArrayAdapter<ExampleObject> {

    private LayoutInflater inflater;

    public NoteAdapter(Context context, int textViewResourceId, List<ExampleObject> objects) {
        super(context, textViewResourceId, objects);
        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return inflater.inflate(R.layout.list_item, parent, false);
    }
}

你的 list_item.xml :

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="@drawable/your_selector">

</RelativeLayout>

我希望,它会对你有所帮助。可能是我犯了错误,因为我编写了没有编译器的代码。

再次更新:

对于您的情况更改android:color="#ff000000"android:drawable="#ff000000". 我希望这会有所帮助。

祝你好运!

于 2013-01-02T18:57:29.917 回答
1

无需创建自己的,但在选择器中Adapter换掉并确保使用正确的方法进行设置。android:colorandroid:drawable

因此,不要将选择器设置为 的背景ListView,而是按如下方式提供它,以便资源在 中的项目上工作ListView

getListView().setSelector(R.drawable.background_listview);
于 2013-01-02T20:38:54.473 回答