在 android API 10 和 API 23 上显示来自 SQLite 的数据的不同结果

Different results on displaying data from SQLite on android API 10 and API 23

我正在 Android 应用程序中访问本地 SQLite 数据库以获取鸟类名称列表,然后将它们显示在 ListView 中。 我正在使用 SQLiteAssetHelper 访问本地存储的数据库。


在测试时我注意到不同的设备会给出不同的结果。

(截图中显示的示例)

Samsung E5823 not displaying full title

Samsung GT-I9001 displaying everything correctly


这是我从数据库中获取数据的代码。

 public List<Specie> getNames() {
    List<Specie> list = new ArrayList<>();

    Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY LATIN ASC", null);
    cursor.moveToFirst();

    while (!cursor.isAfterLast()) {

        String nameLT = cursor.getString(1); // this sometimes displayed not correctly
        String nameLOT = cursor.getString(2); //this is displayed corretly

        list.add(new Specie(R.drawable.ic_bird, nameLT, nameLOT));
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}

这是将数据放入列表的数组适配器代码。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    SpecieHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new SpecieHolder();
        holder.imgIcon = (ImageView)row.findViewById(R.id.icon);
        holder.txtTitle1 = (TextView)row.findViewById(R.id.firstLine);
        holder.txtTitle2 = (TextView)row.findViewById(R.id.secondLine);
        row.setTag(holder);
    }
    else
    {
        holder = (SpecieHolder)row.getTag();
    }
    Specie specie = data.get(position);
    holder.txtTitle1.setText(specie.titleLT);
    holder.txtTitle2.setText(specie.titleLOT);
    setImage(holder.imgIcon, specie.titleLOT);

    return row;
}
static class SpecieHolder
{
    ImageView imgIcon;
    TextView txtTitle1;
    TextView txtTitle2;
}

list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<ImageView
    android:id="@+id/icon"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="6dip"
    android:layout_marginLeft="6dip"
    android:layout_marginRight="6dip"
    android:src="@mipmap/ic_launcher"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_toRightOf="@id/icon"
    android:paddingTop="15dp">

    <TextView
        android:id="@+id/firstLine"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="Example application"
        android:textSize="20sp" />
    <TextView
        android:id="@+id/secondLine"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="Description"
        android:textSize="12sp" />

</LinearLayout>

什么会导致不同设备之间的差异,如何解决这个问题?

(抱歉,如果我没有post解决问题所需的一切,如果需要我会添加)

显然问题不在于数据库,而在于设计。

list_item.xml 中的文本视图宽度设置为 fill_parent,并更改为 wrap_content,解决了问题。