需要帮助让我的 Android Spinner 正确填充存储在 SQLite 数据库中的图像和 unicode 文本
Need help getting my Android Spinner to correctly populate with images and unicode text that are stored in the SQLite Database
我想用存储在 SQLite 数据库中的图像值填充微调器,但我无法使其正常工作。
这是正在发生的事情的图像:
首先,这是我数据库中的内容:
CREATE TABLE `STATUS` (`_id` INTEGER, `value` TEXT, `image` TEXT);
INSERT INTO "STATUS" VALUES (1, "\u003c", "status_image_01");
INSERT INTO "STATUS" VALUES (2, "\u2248", "status_image_02");
INSERT INTO "STATUS" VALUES (3, "\u003e", "status_image_03");
这是我的布局activity_main.xml:
<LinearLayout>
<Spinner android:id="@+id/status_spinner" />
</LinearLayout>
这是微调器中每一行的自定义行 line_of_status.xml:
<LinearLayout>
<ImageView android:id="@+id/status_icon" />
<TextView android:id="@+id/status_text" />
</LinearLayout>
这是我的activityMainActivity.java:
public class Status extends AppCompatActivity {
private Spinner statusSpinner;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContenteView(R.layout.status);
setUpSpinner();
}
private void setUpSpinner(){
DatabaseHelper dbHelper = new DatabaseHelper(this);
String[] fromColumns = {"image", "value"};
int[] toViews = {R.id.status_icon, R.id.status_text};
Cursor statusCursor = dbHelper.getStatusCursor();
statusSpinner = (Spinner)findViewById(R.id.status_spinner);
StatusSimpleCursorAdapter statusSimpleCursorAdapter = new StatusSimpleCursorAdapter(this, R.layout.line_of_status, statusCursor, fromColumns, toViews, 0);
statusSpinner.setAdapter(statusSimpleCursorAdapter);
dbHelper.close();
}
}
这是我自定义的 SimpleCursorAdapter StatusSimpleCursorAdapter.java
public class StatusSimpleCursorAdapter extends SimpleCursorAdapter {
private Context context;
private Cursor cursor;
public StatusSimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flags){
super(context, layout, cursor, from, to, flags);
this.context = context;
this.cursor = cursor;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = super.getView(position, convertView, parent);
cursor.moveToPosition(position);
String statusimage = cursor.getString(cursor.getColumnIndex("image"));
ImageView imageView = (ImageView)row.findViewById(R.id.status_icon);
imageView.setImageResource(context.getResources().getIdentifier(status_image, "drawable", com.mypackage));
return row;
}
}
在我的 app/src/main/res/drawable
目录中我有三张图片:
status_image_01.png
status_image_02.png
status_image_03.png
问题:
我这里的几乎可以用了。当我 select 与微调器不同的状态时,相应的图像出现;但是,它只出现在最后一步,在我 select 编辑状态并且下拉列表消失之后。图片列表不会出现在下拉列表中,即使我将其设置为 dialog
模式。
此外,unicode 字符显示不正确。例如,状态“\u003c”将显示为“\u003c”而不是“<”。我在一个新项目中做了一个快速测试,在这个项目中我用数组而不是 SQLite 数据库中的字符串填充了 Spinner:
<string-array>
<item>\u003c</item>
<item>\u2248</item>
<item>\u003e</item>
</string-array>
我使用了 ArrayAdapter
并且 unicode 字符出现了。
所以,我需要帮助让所有图像填充到微调器下拉列表中,我需要帮助让我的 unicode 字符正确显示。
谢谢
更新:
我解决了 Unicode 字符显示不正确的问题。经过一些挖掘,我发现 SQLite 数据库在将它们插入数据库时转义了我的 Unicode 字符串。所以,我发现 this post 向我展示了如何取消转义字符串,它使用 org.apache.commons.lang3.StringEscapeUtils.unescapeJava(str);
来完成此操作。所以,我将这个添加到我的 StatusSimpleCursorAdapter.java
class:
import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava;
TextView textView = (TextView) row.findViewById(R.id.status_text);
String value = unescapeJava(cursor.getString(cursor.getColumnIndex("value")));
textView.setText(value);
正如我所说,这解决了我的 Unicode 无法正确显示的问题,但是我仍然有一个剩余的问题......有一个新的变化。图片仍然没有显示在下拉列表中,现在转义的 Unicode 也显示在下拉列表中。使用 selected 项目,图像和未转义的 Unicode 都可以正确显示,只是在下拉列表中似乎没有任何作用。
有什么建议吗?
谢谢。
好的,在用头撞墙一周后,我终于找到了适合我的答案。
Here it is.
这解决了我的 Spinner 下拉列表中的图像和 Unicode 问题。
我想用存储在 SQLite 数据库中的图像值填充微调器,但我无法使其正常工作。
这是正在发生的事情的图像:
首先,这是我数据库中的内容:
CREATE TABLE `STATUS` (`_id` INTEGER, `value` TEXT, `image` TEXT);
INSERT INTO "STATUS" VALUES (1, "\u003c", "status_image_01");
INSERT INTO "STATUS" VALUES (2, "\u2248", "status_image_02");
INSERT INTO "STATUS" VALUES (3, "\u003e", "status_image_03");
这是我的布局activity_main.xml:
<LinearLayout>
<Spinner android:id="@+id/status_spinner" />
</LinearLayout>
这是微调器中每一行的自定义行 line_of_status.xml:
<LinearLayout>
<ImageView android:id="@+id/status_icon" />
<TextView android:id="@+id/status_text" />
</LinearLayout>
这是我的activityMainActivity.java:
public class Status extends AppCompatActivity {
private Spinner statusSpinner;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContenteView(R.layout.status);
setUpSpinner();
}
private void setUpSpinner(){
DatabaseHelper dbHelper = new DatabaseHelper(this);
String[] fromColumns = {"image", "value"};
int[] toViews = {R.id.status_icon, R.id.status_text};
Cursor statusCursor = dbHelper.getStatusCursor();
statusSpinner = (Spinner)findViewById(R.id.status_spinner);
StatusSimpleCursorAdapter statusSimpleCursorAdapter = new StatusSimpleCursorAdapter(this, R.layout.line_of_status, statusCursor, fromColumns, toViews, 0);
statusSpinner.setAdapter(statusSimpleCursorAdapter);
dbHelper.close();
}
}
这是我自定义的 SimpleCursorAdapter StatusSimpleCursorAdapter.java
public class StatusSimpleCursorAdapter extends SimpleCursorAdapter {
private Context context;
private Cursor cursor;
public StatusSimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flags){
super(context, layout, cursor, from, to, flags);
this.context = context;
this.cursor = cursor;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = super.getView(position, convertView, parent);
cursor.moveToPosition(position);
String statusimage = cursor.getString(cursor.getColumnIndex("image"));
ImageView imageView = (ImageView)row.findViewById(R.id.status_icon);
imageView.setImageResource(context.getResources().getIdentifier(status_image, "drawable", com.mypackage));
return row;
}
}
在我的 app/src/main/res/drawable
目录中我有三张图片:
status_image_01.png
status_image_02.png
status_image_03.png
问题:
我这里的几乎可以用了。当我 select 与微调器不同的状态时,相应的图像出现;但是,它只出现在最后一步,在我 select 编辑状态并且下拉列表消失之后。图片列表不会出现在下拉列表中,即使我将其设置为 dialog
模式。
此外,unicode 字符显示不正确。例如,状态“\u003c”将显示为“\u003c”而不是“<”。我在一个新项目中做了一个快速测试,在这个项目中我用数组而不是 SQLite 数据库中的字符串填充了 Spinner:
<string-array>
<item>\u003c</item>
<item>\u2248</item>
<item>\u003e</item>
</string-array>
我使用了 ArrayAdapter
并且 unicode 字符出现了。
所以,我需要帮助让所有图像填充到微调器下拉列表中,我需要帮助让我的 unicode 字符正确显示。
谢谢
更新:
我解决了 Unicode 字符显示不正确的问题。经过一些挖掘,我发现 SQLite 数据库在将它们插入数据库时转义了我的 Unicode 字符串。所以,我发现 this post 向我展示了如何取消转义字符串,它使用 org.apache.commons.lang3.StringEscapeUtils.unescapeJava(str);
来完成此操作。所以,我将这个添加到我的 StatusSimpleCursorAdapter.java
class:
import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava;
TextView textView = (TextView) row.findViewById(R.id.status_text);
String value = unescapeJava(cursor.getString(cursor.getColumnIndex("value")));
textView.setText(value);
正如我所说,这解决了我的 Unicode 无法正确显示的问题,但是我仍然有一个剩余的问题......有一个新的变化。图片仍然没有显示在下拉列表中,现在转义的 Unicode 也显示在下拉列表中。使用 selected 项目,图像和未转义的 Unicode 都可以正确显示,只是在下拉列表中似乎没有任何作用。
有什么建议吗?
谢谢。
好的,在用头撞墙一周后,我终于找到了适合我的答案。
Here it is.
这解决了我的 Spinner 下拉列表中的图像和 Unicode 问题。