我有一个枚举,我需要将值显示为本地化字符串.我目前的做法是:
public enum MyEnum {
VALUE1(R.string.VALUE1),
VALUE2(R.string.VALUE2),
.
.
VALUE10(R.string.VALUE10);
private int mResId = -1;
private MuEnum(int resId) {
mResId = resId;
}
public String toLocalizedString(Resources r) {
if (-1 != mResId) return (r.getString(mResId));
return (this.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来做到这一点?如果我能以某种方式根据枚举值名称(即'VALUE1')查找资源,我会喜欢它.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="VALUE1"/>My string</string>
<string name="VALUE2"/>My string 2</string>
.
.
<string name="VALUE10"/>My string 3</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:为了将来参考,这是最适合我的解决方案:
public enum MyEnum {
VALUE1,
VALUE2,
.
.
VALUE10;
/**
* Returns a localized label used to represent this enumeration value. …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个由枚举填充的Spinner:
ArrayAdapter<myEnum> enumAdapter = new ArrayAdapter<Stroke> (parentActivity.getApplicationContext(), R.layout.simple_spinner_item, myEnum.values());
enumAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
enumSpinner.setAdapter(strokeAdapter);
Run Code Online (Sandbox Code Playgroud)
这使用了枚举toString()方法的覆盖来获取要在其中显示的枚举值的友好名称Spinner.目前我的enum有友好名字的字符串硬编码,但我想将它们移动strings.xml到支持本地化.
但是,toString无权访问,Context因此我不确定如何解析资源ID.
有没有办法在枚举的toString()方法中获取本地化字符串?
是否有一种明智,干净的方式来引用我的android类中的静态initalizer代码中的应用程序资源.
我特别想定义一个枚举,它包含常量中某些资源字符串的值.
这是枚举的一些伪代码
private enum MyEnum {
Const1(getString(R.string.string1)),
Const2(getString(R.string.string2)),
Const3(getString(R.string.string3));
private String strVal;
MyEnum(String strVal){
this.strVal = strVal;
}
}
Run Code Online (Sandbox Code Playgroud)
此问题适用于任何类型的静态初始化.
我有一个枚举,其中值以utf8格式显示。因此,我的jsp视图中存在一些编码问题。有没有办法从我的messages.properties文件中获取值。如果我的属性文件中包含以下几行,该怎么办:
shop.first=??????
shop.second=??????
shop.third=??????
Run Code Online (Sandbox Code Playgroud)
我如何将它们注入枚举?
public enum ShopType {
FIRST("??????"), SECOND("??????"), THIRD("??????");
private String label;
ShopType(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
Run Code Online (Sandbox Code Playgroud) 如何在线程中添加Toast方法.我想通过用toast方法替换system.out来调试,以显示结果.
我知道在线程中使用应用程序Context,如下所示:Toast.makeText(getApplicationContext(),"help",Toast.LENGTH_LONG).show(); 不管用.
我不知道如何在Toast调用中使用Runnable并从Thread调用runOnUiThread(runnable)
有人可以帮助我吗?
public class NetworkServer extends Thread
{
DatagramSocket mSocket = null;
boolean isFinish = false;
private SimplestPossibleActivity activity;
public NetworkServer(SimplestPossibleActivity activity)
{
this.activity = activity;
}
public void run()
{
try
{
Log.d("UDP", "Listening");
mSocket = new DatagramSocket( 2010); //4444
mSocket.setBroadcast(true);
while (!isFinish)
{
Log.d("UDP", "C: socket create success");
byte[] recvbuffer = new byte[12];
DatagramPacket packet = new DatagramPacket(recvbuffer,recvbuffer.length);
Log.d("UDP", "receiving...");
mSocket.receive(packet);
Log.d("UDP", "received packet");
ByteBuffer bb = ByteBuffer.allocate(recvbuffer.length).order(ByteOrder.LITTLE_ENDIAN);
bb.put(recvbuffer);
bb.rewind();
//System.out.println(bb.getFloat());
//System.out.println(bb.getFloat());
//System.out.println(bb.getFloat());
Bundle data …Run Code Online (Sandbox Code Playgroud)