我有一个edittext
和按钮,它将editText
文本传递给另一个活动onClick
,当涉及第二个活动时,它正在从主要活动接收文本。
我的问题是,我在String资源文件夹中有超过20个字符串名称,我必须打开与主要活动的edittext
值匹配的特定字符串。
简而言之,我必须更改匹配字符串资源String
textview
文本
<resources>
<string name="app_name">sylb</string>
<string name="title_activity_display">display</string>
<string name="large_text">some_large_text</string>
<string name="ds15mca21">second mca</string>
<string name="ds15mca11">first mca</string>
<string name="ds15mba21">second <b>mba</b>></string>
<string name="ds15aut21">second <i>automobile</i></string>
<string name="action_settings">Settings</string>
</resources>
显示代码
public class display extends AppCompatActivity {
String code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
code= extras.getString("keyName");
TextView textView= (TextView) findViewById(R.id.textapp);
textView.setText("R.string." + "ds" + code);
}
}
答案 0 :(得分:1)
这将完成你的工作!
只需传递您修正的String
而不是&#34; app_name
&#34; (不要只使用R.string作为资源名称)
示例:如果我想获得
的值 <string name="app_name">ItsCharuHereHiFolks</string>
你需要这样做
final TextView textView = (TextView) findViewById(R.id.your_text_view);
String string = getString(getResId("app_name", R.string.class));
textView.setText(string);
和
public static int getResId(String resName, Class<?> c) {
try {
Field idField = c.getDeclaredField(resName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
答案 1 :(得分:0)
使用以下代码!
getResources().getString(resId)//resId is R.string.STRING_NAME
答案 2 :(得分:0)
你可以试试这个
textView.setText(getResources().getIdentifier("R.string." + "ds" + code,"string",getPackageName()));
答案 3 :(得分:0)
真的很容易。在你的班级中使用它
private String getStringResourceByName(String aString) {
String packageName = getPackageName();
int resId = getResources().getIdentifier(aString, "string", packageName);
return getString(resId);
}
并简单地使用此
textView.setText(getStringResourceByName("ds" + code));
或者你可以简单地使用上面的类并提取任何字符串。
示例
如果您想从资源
下面 questions_en <string name="questions_en">Questions</string>
使用此
String question=getStringResourceByName("questions_en");
此外,在
getStringResourceByName
中使用整数而不是字符串 得到整理资源的方法。
getIdentifier (String name, String defType, String defPackage)
做好工作!!
答案 4 :(得分:0)
虽然@ Charu的答案非常好且高效,可以执行id属于不同资源类型的通用任务,但如果您知道字符串资源名称并且您的任务仅与字符串相关,您仍然可以拥有更好的解决方案。
<强>步骤1 强>
在您的调用Activity中,请使用以下代码。
Intent intent = new Intent(this, newActivity.class);
intent.putExtra("StringResourceId", R.string.dsAbcXyz); //this step will directly pass the int value of your string resource without any iterations
startActivity(intent);
<强>步骤-2 强>
然后在newActivity中,使用以下代码。
Intent prevIntent = getIntent();
int resId = prevIntent.getIntExtra("StringResourceId");
textView.setText(resId); //you can directly pass the int id to textview to display the relevant text
当您非常确定要作为参数传递的resourxe名称时,此方法可以正常工作。
但是如果你通过像服务器这样的随机来源获得你的名字 或者数据库,那么我建议你按照@ Charu的解决方案。
答案 5 :(得分:-1)
使用此
getResources().getIdentifier("ds" + code, "String", getPackageName());