使用此代码,我的程序只强制关闭(错误)
***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)在另一个布局中使用;
答案 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.infoname
,x
也会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}}