我正在尝试创建货币应用。我在主活动上有一个按钮,当您单击该按钮时,它会打开一个对话框,就像货币转换器一样。我的问题是我无法从主要活动打开的对话框中获取主要活动的文本视图的值。
这是我从主要活动
打开对话框的方式 Button calc = (Button) findViewById(R.id.btn_converter);
calc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent myIntent = new Intent(MainActivity.this, Calculator.class);
MainActivity.this.startActivity(myIntent);
}
});
这就是我试图从对话框中读取textview的值
Textview t1 = (TextView) findViewById(R.id.txt_cad_alis)
但" t1"永远是空的。我做错了什么?
答案 0 :(得分:2)
将TextView
声明为成员变量(在方法之外,可能在类声明之后。然后初始化TextView
中的onCreate()
public class MyActivity extends Activity
{
TextView t1;
public void onCreate(...)
{
...
t1 = (TextView) findViewById(R.id.txt_cad_alis);
...
}
然后使用String text = ti.getText().toString()
之类的内容来获取Dialog
答案 1 :(得分:1)
您正在尝试访问第一个Activity上的Textview t1, 从你的第二个活动。这就是它始终为空的原因。
单击按钮并将其置于hte intent中时,您应该从TextView获取值。
Button calc = (Button) findViewById(R.id.btn_converter);
calc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Textview t1 = (TextView) findViewById(R.id.txt_cad_alis);
String value = t1.getText().toString();
Intent myIntent = new Intent(MainActivity.this, Calculator.class);
intent.putExtra("aKey", value);
MainActivity.this.startActivity(myIntent);
}
});
然后在第二个活动的onCreate()方法中,您可以检索如下值:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
Intent i = getIntent();
if (i.hasExtra("aKey")){
String value = i.getStringExtra("aKey");
}
}
答案 2 :(得分:1)
为t1 TextView声明一个类属性,并在MainActivity的onCreate()中获取它的引用。然后,在启动CalculatorActivity之前,获取t1的值并将其传递给Intent。在这种情况下,通过“myIntent”。希望它有所帮助。
答案 3 :(得分:1)
这里要记住的一件重要事情是封装 - 你当然不应该直接从对话框中访问属于MainActivity的视图。这不仅违反了最佳实践和封装原则,而且如果您想在不同的环境中重用对话框,它也会让您头疼不已。
这个想法是,如果给出正确的信息,任何单独的视图(如对话框)都应该可以在任何情况下使用,并且不应该依赖于其父类中某些字段的存在。
你应该做的是获取onClick中文本字段的值,然后将意图传递给对话框。
答案 4 :(得分:1)
您无法访问属于其他活动的View
。您可以做的是在开始活动之前阅读该值,并使用intent extras将其发送到您的第二个活动:
Intent myIntent = new Intent(MainActivity.this, Calculator.class);
myIntent.putExtra("value", t1.getText().toString());
MainActivity.this.startActivity(myIntent);
在Calculator
课程中,很容易获得价值:
protected void onCreate(Bundle savedInstanceState) {
...
String textViewValue = getIntent().getStringExtra("value");
}
答案 5 :(得分:0)
两个可能的原因:
setContentView()
中致电onCreate()
,或者您将错误的布局ID传递给setContentView()
。txt_cad_alis
不是textview的正确ID。