大家。
我正在为我的学校制作一个Android项目,我几乎没有问题。
我在开发Android应用程序方面没有太多经验。
所以,让我解释一下我想做的事情:
我希望用户输入一些整数,然后当他按下名为&#34的按钮;计算"时,我的应用程序会计算我的代码中的等式。
我无法使其工作的棘手部分是弹出一个输入对话框(一切正常,直到这里),他输入的数字出现在主要活动中......在主要活动中我想替换按钮或文本视图的文本..
答案 0 :(得分:0)
所以这就是代码:
我已经将它运行到我的手机进行测试并出现对话框,但是如果我点击确定它会崩溃。 抱歉,这是我第一次尝试创建Android应用程序。
主Activity.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:gravity="right"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.test1.justtesting.MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:contentDescription="@string/schematic"
android:src="@drawable/schematic" />
<Button
android:id="@+id/buttonu1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_centerVertical="true"
android:text="@string/Buttonu1"
android:onClick="showprompt" />
<Button
android:id="@+id/buttonr2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/imageView1"
android:layout_below="@+id/buttonr1"
android:text="@string/Buttonr2" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/imageView1"
android:layout_below="@+id/imageView1"
android:onClick="calculate"
android:text="@string/Button1" />
<Button
android:id="@+id/buttonr1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/imageView1"
android:layout_alignTop="@+id/imageView2"
android:layout_marginTop="48dp"
android:text="@string/Buttonr1" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/imageView1"
android:layout_alignLeft="@+id/imageView1"
android:layout_marginLeft="20dp"
android:contentDescription="@string/mathtype"
android:src="@drawable/mathtype" />
<Button
android:id="@+id/buttonu2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/imageView1"
android:layout_below="@+id/buttonu1"
android:layout_marginTop="18dp"
android:text="@string/Buttonu2" />
</RelativeLayout>
主要Activity.java
package com.test1.justtesting;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends ActionBarActivity {
final Context context = this;
private EditText result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void showprompt (View view) {
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompts, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
alertDialogBuilder.setView(promptsView);
final EditText userInput = (EditText) promptsView
.findViewById(R.id.editTextDialogUserInput);
alertDialogBuilder
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// get user input and set it to result
// edit text
result.setText(userInput.getText());
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
答案 1 :(得分:0)
该行
result.setText(userInput.getText());
导致崩溃,因为变量“result”为null。 Android不知道你想要改变什么。添加
result=(TextView) findViewById(R.id.something);
在你的oncreate方法中。请注意,必须在设置contentview后执行此操作。您应该学习如何读取控制台以进行调试。
快乐学习Android!
答案 2 :(得分:0)
错误在于:
result.setText(userInput.getText());
您从userInput edittext字段获取了文本。但是您无法将文本设置为edittext。你必须设置一个字符串。所以,你必须从userInput获取一个字符串。简单的解决方案是
result.setText(userInput.getText().toString());