我刚刚开始编写 Android 应用程序。我已经完成了一些初学者的教程,但是我在下一步中遇到了麻烦,我找不到任何有用的答案。
我想编写一个应用程序来计算取决于三个参数的复杂函数的值。如果我将所有内容放在一个视图中,这将起作用:对于每个参数,一个 TextField(带有参数名称)加上一个 EditText 字段来输入值。在底部有一个 Button,当单击它时,结果会显示在另一个 TextField 中。
但现在我想改进布局(另外我想学习如何处理更复杂的结构):其中两个参数通常只设置一次,然后保持它们的值。所以我决定将这两个参数移到不同的视图。
不,我正在寻找建议(并希望链接示例代码):我应该使用哪种结构?似乎我不需要使用不同的活动,但是一个具有不同视图的活动应该可以完成这项工作。ViewSwitcher 听起来很合理,因为在这种情况下我只需要两个不同的视图。另一方面,ViewFlipper 可能更可取,因为我可以稍后将其重用于具有多个视图的其他项目。我还读到 ViewPager 允许在不同的视图之间滑动。
如果这是在不同的视图上,我如何阅读 EditField?我尝试使用 ViewSwitcher,当我添加一个额外的按钮来切换到第二个视图时,它就起作用了。但是当我将参数一和二的 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;
}
}
这个版本正在工作: - 当按下第一个按钮时,它计算:结果 = 2 * value1 + value2) - 当按下按钮“切换视图 1”时,它进入第二个视图 - 在第二个视图上,按下按钮时“切换视图 2”,返回视图 1
但我无法让以下两部分工作:1)我想将“切换视图 1”按钮移动到第一个视图的顶部,但这会在模拟器中产生错误(“不幸的是 testas2 已停止” )。2)我想将第二个值的输入移动到第二个视图,但这会在模拟器中产生相同的错误。
我究竟做错了什么?为什么布局中元素的顺序很重要,如何修改代码以使其正常工作?