【问题标题】:How would i store a number/string into R.string.xx?我如何将数字/字符串存储到 R.string.xx 中?
【发布时间】:2012-01-17 01:24:20
【问题描述】:

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

***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); 用于另一个布局;

【问题讨论】:

    标签: android string settext


    【解决方案1】:

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

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

    有关示例用法,请参阅 android 文档上的:SharedPreferences

    【讨论】:

    • 谢谢,我用过这个.. TextView x = (TextView) findViewById(); x.setText("你好" + getString(R.string.nfoname));它工作得很好,但是如何将一些东西设置成字符串呢?在我看来,一个抽象类似于 idontknow x = (idontknow) findViewById(R.string.stringname);这样每当我更改 x 时,R.string.stringname 也会更改
    【解决方案2】:

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

    我要问的另一件事是为什么您将 infoname 标记为 final?当 onCreate() 退出时它会超出范围,因此如果它被更改,您可以看到是谁更改了它,因为它只在方法执行时存在。

    【讨论】:

      【解决方案3】:

      您不能将值设置为 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必须是final的?

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

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

      【讨论】:

        【解决方案4】:
        public View x = findViewById(R.string.nfoname);
        

        这行不通,因为您不仅要尝试使用 R.string 资源 id 查找 View,而且要在 setContenView(...)onCreate(...) 方法中调用之前执行此操作。即使您使用了有效的 View 资源 id,例如 R.id.infoname,那么 x 也将是 null,因为内容视图尚未膨胀。

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

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

        x=(View) infoname.getText();
        

        x 不仅会是null,而且在EditText 上调用getText() 会返回一个Editable,它不是View,也不可能将其转换为View。即使您使用getText().toString()(这是从EditText 获取文本的正确方法),仍然无法将String 转换为View

        还有,至于这个……

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

        应该是……

        TextView x = (TextView) findViewById(<some id>);
        x.setText(getString(R.string.nfoname));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          • 1970-01-01
          • 2014-04-24
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          相关资源
          最近更新 更多