我如何将数字/字符串存储到R.string.xx中?

时间:2012-01-17 01:24:21

标签: android string settext

使用此代码,我的程序只强制关闭(错误)

***public View x = findViewById(R.string.nfoname);***
@Override
public void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.information);
//edittext
***final EditText infoname=(EditText)findViewById(R.id.infoname);***

//clear,confirm
Button clear = (Button)findViewById(R.id.buttonclear);
Button confirm = (Button)findViewById(R.id.buttonconfirm);

//clear button
clear.setOnClickListener(new View.OnClickListener() {       
    public void onClick(View v) {
        // TODO Auto-generated method stub
        infoname.setText("");
    }
});
//confirm button
confirm.setOnClickListener(new View.OnClickListener() {     
    public void onClick(View v) {

        ***x=(View) infoname.getText();***
    }
});
}

* 的那个是错误来源

程序功能: 如果用户单击确认,则其名称将设置为R.string.nfoname 然后将通过TextView x = setText(R.string.nfoname)在另一个布局中使用;

4 个答案:

答案 0 :(得分:2)

我不确定您是否可以将文本保存到R.string。这是编译器为您创建的生成类。它与你的apk打包在一起。将资源视为翻译手段并将文本呈现在屏幕上。

我认为您想要做的是将用户输入保存为SharedPreference或数据库。

请参阅:android文档中的SharedPreferences以获取示例用法。

答案 1 :(得分:0)

至少在您的变量infoname作用域的情况下,最有可能导致您的应用程序抛出错误。 infoname是函数onCreate()的局部变量,而不是类的实例变量,因此onClick()方法无法访问它,因为它们是匿名类的一部分。

我要问的另一件事是你为什么把infon标记为最终?当onCreate()退出时,它超出了范围,所以如果它被更改,你可以看到谁更改了它,因为它只在方法执行时才存在。

答案 2 :(得分:0)

您不能将值设置为R.string.xxx,因为所有这些值都是常量,就像只读的东西一样。如果要将编辑文本的值用于其他布局,请使用类变量或intent.putextra()

来源代码我看到了这个

public View x = findViewById(R.string.nfoname);

如何通过R.String找到视图?这应该是R.id。

final EditText infoname =(EditText)findViewById(R.id.infoname); 为什么这个editText必须是最终的?

***x=(View) infoname.getText();***

您只需使用infoname.getText().toString(),您将获得Edittext当前文本的字符串值。 老兄,你可以简单地做点什么。

答案 3 :(得分:0)

public View x = findViewById(R.string.nfoname);

这不起作用,因为您不仅要使用View资源ID找到R.string,而是在setContenView(...)调用onCreate(...)之前执行此操作} 方法。即使您使用有效的View资源ID,例如R.id.infonamex也会null,因为内容视图尚未充气。

final EditText infoname=(EditText)findViewById(R.id.infoname);

除了毫无意义地使用final之外,只要R.id.infoname实际上是EditText的资源ID,就不会引起问题。

x=(View) infoname.getText();

x null不仅会getText(),而且EditText上的Editable会回复View,而不是View也不是getText().toString()可以将它投射到EditText。即使您使用String这是从View获取文本的正确方法,但仍然无法将TextView x = (TextView) findViewById(<some id>); x.setText(getString(R.string.nfoname)); 转换为{{1}}。

另外,至于......

  

TextView x = setText(R.string.nfoname);

它必须是......

{{1}}