我刚刚开始编写Android应用程序。我做了一些初学者的教程,但是我在下一步找不到任何有用的答案时遇到了麻烦。
我想编写一个应用程序来计算复杂函数的值,该函数取决于三个参数。如果我将所有内容放在一个视图上,这都有效: 对于每个参数,一个TextField(带有参数名称)加上一个EditText字段来输入值。在底部有一个Button,单击此按钮时,结果将显示在另一个TextField中。
但现在我想改进布局(另外我想学习如何处理更复杂的结构): 其中两个参数通常只设置一次,然后保持其值。所以我决定将这两个参数移到另一个视图。
不,我正在寻找建议(并希望链接示例代码): 我应该使用哪种结构?似乎我不需要使用不同的活动,但是一个具有不同视图的活动应该完成这项工作。 ViewSwitcher听起来很合理,因为在这种情况下我只需要两个不同的视图。另一方面,ViewFlipper可能更受欢迎,因为我可以稍后将其重用于具有多个视图的其他项目。我还读到ViewPager允许在不同视图之间滑动。
如果这是在另一个视图上,我如何阅读EditField? 我试图使用ViewSwitcher,当我添加一个额外的按钮切换到第二个视图时,它工作。但是当我为参数1和2移动TextField和EditField时 到第二个视图,应用程序不在模拟器上运行,只是声明“应用程序中的错误”(而Eclipse显示没有错误)。从这一点来看,我想我必须做一些额外的工作来在不同的视图之间传递EditText中的数据。 我没有找到任何这方面的例子 - 有人可以给我一些建议/例子吗?
感谢任何帮助
我认为没有任何代码,我的初始描述可能不太有用。 这是我的布局
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/viewSwitcher1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView android:id="@+id/pg1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1st view" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView android:id="@+id/v1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="value1" />
<EditText android:id="@+id/val1"
android:text="2.0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView android:id="@+id/v2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="value2" />
<EditText android:id="@+id/val2"
android:text="3.0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="numberDecimal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button android:layout_width="wrap_content"
android:id="@+id/calc"
android:layout_height="wrap_content"
android:text="2*Val1 + Val2 =" />
<TextView android:id="@+id/res"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="switch view 1" />
</LinearLayout>
</LinearLayout>
<!-- next view -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView android:id="@+id/pg2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="View 2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button android:id="@+id/b2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="switch view 2" />
</LinearLayout>
</LinearLayout>
</ViewSwitcher>
这是我的主要活动:
package com.example.testas2;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ViewSwitcher;
public class MainActivity extends Activity {
ViewSwitcher switcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
switcher = (ViewSwitcher)findViewById(R.id.viewSwitcher1);
initControls();
}
private void initControls()
{
Button calculate=(Button)findViewById(R.id.calc);
calculate.setOnClickListener(new Button.OnClickListener()
{public void onClick (View v) { calculate(); }});
Button b1=(Button)findViewById(R.id.b1);
b1.setOnClickListener(new Button.OnClickListener()
{public void onClick (View v) { switcher.showNext(); }});
Button b2=(Button)findViewById(R.id.b2);
b2.setOnClickListener(new Button.OnClickListener()
{public void onClick (View v) { switcher.showPrevious(); }});
calculate();
}
private void calculate()
{
EditText val1=(EditText)findViewById(R.id.val1);
EditText val2=(EditText)findViewById(R.id.val2);
TextView res=(TextView)findViewById(R.id.res);
Double Val1=Double.parseDouble(val1.getText().toString());
Double Val2=Double.parseDouble(val2.getText().toString());
Double result = 2*Val1+Val2;
res.setText( String.format( "%.3f", result ) );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
此版本正常运作: - 当按下第一个按钮时,它会计算:result = 2 * value1 + value2) - 按下“切换视图1”按钮时,它将进入第二个视图 - 在第二个视图中,当按下“切换视图2”按钮时,它返回到视图1
但是我无法使用以下两件作品: 1)我想将“切换视图1”按钮移动到第一个视图的顶部,但这会在模拟器中出错(“不幸的是testas2已停止”)。 2)我想将第二个值的输入移动到第二个视图,但这会在模拟器中产生相同的错误。
我做错了什么? 为什么布局中元素的顺序很重要,如何修改我的代码以使其有效?
答案 0 :(得分:1)
示例代码 -
TextView tField= (add cast here)findViewById(R.id.editText)
tfield.getText();
如果你发布一些你的代码,上面的答案可以得到改善,因为findViewById有时取决于容器视图,上面的代码将不起作用,因为它将在默认视图中查找文本字段。
答案 1 :(得分:1)
我刚做了“Project&gt; Clean”,在模拟器中重新启动了应用程序,现在它正常运行!
换句话说,原始问题的解决方案是微不足道的(实际上没有真正的问题)。可以简单地在视图内或视图之间移动布局文件(TextView,EditText,Button)中的元素。发布的活动始终有效,并且代码中的任何位置都可以访问数据(来自不同的TextView和EditView字段)。因此,不需要在视图之间明确地“传输”数据。
只有在布局文件中移动元素后,才应该执行“Project&gt; Clean”。
答案 2 :(得分:0)
在您当前的活动中,创建一个新的意图:
Intent i = new Intent(getApplicationContext(), NewActivity.class);
i.putExtra("new_variable_name","value");
startActivity(i);
然后在新的Activity中,检索这些值:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("new_variable_name");
}
有关详细信息,请按照此link
进行操作