0

我对 Android 有点陌生,我 3 天前开始使用 SQLite。我设法从数据库中填充了一个列表,并在 The Pragmatic Programmers - Hello Android 之后定义了一些视图,但是我有一个问题:当显示列表并且我想选择一个项目时,它只会突出显示条目下方和上方的一行列表。我确信它必须与列表行 xml 或 listview xml 的定义有关。虽然我会发布整个代码。

验证列表.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/l_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/l_idcolon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=": "
 />
<TextView
android:id="@+id/l_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
 />
<TextView
android:id="@+id/L_namecolon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=": "
/>
<TextView
android:id="@+id/av"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textStyle="italic"
 />
</LinearLayout>

测试.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- Note built-in ids for 'list' and 'empty' -->
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/empty" />
</LinearLayout>

这是我的活动的代码:

public class LinesListActivity extends ListActivity {

private static final String TAG = "ValidationsListActivity";
private static int [] TO = {R.id.l_id,R.id.l_name,R.id.av};


private DbManipulator dbm;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.testing);

    dbm = new DbManipulator(this);
    try
    {

        Cursor c = dbm.getLines();
        startManagingCursor(c);
        showEvents(c);
    }
    finally
    {

    }
}

private void showEvents(Cursor c) {

    SimpleCursorAdapter adapter = new   SimpleCursorAdapter(this,R.layout.validations_list,c,FROM_V,TO);
    setListAdapter(adapter);

}


@Override
public void onPause()
{
    super.onPause();
    dbm.close();
}
}

而且我为我的应用程序定义了一种样式,但是当我将其更改回正常样式时,问题仍然存在,实际上没有任何变化。

4

1 回答 1

1

选择器默认显示在默认为透明的列表后面,因此您可以通过它看到选择器。

您已经为背景设置了不透明的颜色,因此您需要将选择器设置在顶部。

将此添加到您的列表视图 XML

android:drawSelectorOnTop="true"

那应该解决它。

编辑

好的,下一个技巧。设置颜色状态选择器。

1)在您的文件夹中创建一个颜色列表values,将颜色名称设置为其十六进制数字:

颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#ffffff</color>
    <color name="blue">#2554C7</color>
    <color name="green">#347C2C</color>
</resources>

2)在您的文件夹中创建一个选择器drawable

item_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
     android:state_pressed="true" 
     android:drawable="@color/green" />
</selector>

3) 最后,将选择器设置为列表行元素的背景:

android:background="@drawable/item_selector"

使用上述方法会导致您按下的列表项的背景在按下时变为绿色,从而使文本在顶部可见。

于 2012-06-01T06:36:44.213 回答