Android 将值从编辑文本(由用户输入)传递到文本视图
我试图将对话框中的编辑文本的值传递到同一活动的文本视图。 我使用2个单独的xml文件来进行对话和活动 运行代码时,出现无法将编辑文本转换为文本视图的错误: 请让我知道我做错了什么 我的代码:Android 将值从编辑文本(由用户输入)传递到文本视图,android,Android,我试图将对话框中的编辑文本的值传递到同一活动的文本视图。 我使用2个单独的xml文件来进行对话和活动 运行代码时,出现无法将编辑文本转换为文本视图的错误: 请让我知道我做错了什么 我的代码: public class Water extends Activity implements OnClickListener{ Button water, date; private DatePicker date_picker; static final int DATE_D
public class Water extends Activity implements OnClickListener{
Button water, date;
private DatePicker date_picker;
static final int DATE_DIALOG_ID = 100;
private static final int DIALOG_TEXT_ENTRY_LOG = 1;
SimpleDateFormat formatter;
String result;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView (R.layout.diary_water);
initialize();
water.setOnClickListener(this);
final Calendar calendar = Calendar.getInstance();
formatter = new SimpleDateFormat("EEE, MMM d, yyyy");
// 3-lettermonth name & 2-char day of month
date.setText(formatter.format(calendar.getTime()));
}
private void initialize() {
// TODO Auto-generated method stub
water = (Button) findViewById(R.id.bGlassOfWater);
date = (Button) findViewById(R.id.bDateWater);
}
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.bDateWater:
break;
case R.id.bGlassOfWater:
showDialog (DIALOG_TEXT_ENTRY_LOG);
break;
}
}
@Override
public Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_TEXT_ENTRY_LOG:
LayoutInflater wat = LayoutInflater.from(this);
final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
return new AlertDialog.Builder(Water.this)
//.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.Water)
.setView(textEntryViewAcc)
.setPositiveButton(R.string.alert_dialog_save,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked OK so do some stuff */
LayoutInflater wat = LayoutInflater.from(Water.this);
final EditText glwat= (EditText) ((EditText) dialog).findViewById(R.id.etGlasesOfWater);
result = glwat.getText().toString();
TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
tvwater.setText(result);
}
})
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
/* User clicked cancel so do some stuff */
dialog.dismiss();
}
})
.create();
}
return null;
}
}
对话框XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/etGlasesOfWater"
android:layout_width="173dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginRight="27dp"
android:layout_marginTop="25dp"
android:layout_toLeftOf="@+id/tvGlasses"
android:ems="10"
android:gravity="center_horizontal"
android:scrollHorizontally="true"
android:textAppearance="?android:attr/textAppearanceMedium" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/tvGlasses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/etGlasesOfWater"
android:layout_alignBottom="@+id/etGlasesOfWater"
android:layout_alignParentRight="true"
android:layout_marginRight="19dp"
android:gravity="left"
android:text="glasses"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
检查您的xml,它看起来像是
tvGlassOfWater
是一个EditText
,但您正试图在Java代码中转换为TextView
TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
如果这是xml文件中的TextView
,请发布日志和相关xml代码。解决方案:
必须在代码的前面定义编辑文本,然后很容易调整积极按钮:
@Override
public Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_TEXT_ENTRY_LOG:
LayoutInflater wat = LayoutInflater.from(this);
final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
final EditText glwater = (EditText) textEntryViewAcc.findViewById(R.id.etGlasesOfWater);
return new AlertDialog.Builder(Water.this)
//.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.Water)
.setView(textEntryViewAcc)
.setPositiveButton(R.string.alert_dialog_save,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String result = glwater.getText().toString();
TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
tvwater.setText(result);
谢谢@codeMagic的帮助:)因为您将
对话框
转换为编辑文本
。请这样尝试
final EditText edit = (EditText)dialog.findViewById(R.id.editText);
final TextView text = (TextView)dialog.findViewById(R.id.textView);
你不需要这么多的代码。@Akshay-我发布了日志结果广播是错误的,你不能将textview转换成edittext,反之亦然。那就是你得到了classcastException。得到了mah点吗?是的-@Gang of One GoO-找到了解决方法。发布在下面。谢谢。我已经添加了两个XML…我正在尝试将信息从编辑文本发送到文本视图。这是第86行:final EditText glwat=(EditText)((EditText)对话框);我会去掉
((EditText)
和额外的“)”因为我觉得没有必要这样做。您只需要(EditText)dialog.findViewById(R.id.etglaseofwater)代码>。然后尝试清理项目,“项目-->清理…”。然后再次运行它,看看它是否修复了itI。我已经删除了它,但我得到一个错误,方法finViewById(int)未定义…:(请添加一些关于解决方案的注释,说明它为什么以及如何解决问题
@Override
public Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_TEXT_ENTRY_LOG:
LayoutInflater wat = LayoutInflater.from(this);
final View textEntryViewAcc = wat.inflate(R.layout.glass_of_water, null);
final EditText glwater = (EditText) textEntryViewAcc.findViewById(R.id.etGlasesOfWater);
return new AlertDialog.Builder(Water.this)
//.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.Water)
.setView(textEntryViewAcc)
.setPositiveButton(R.string.alert_dialog_save,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String result = glwater.getText().toString();
TextView tvwater = (TextView)findViewById(R.id.tvGlassOfWater);
tvwater.setText(result);
final EditText edit = (EditText)dialog.findViewById(R.id.editText);
final TextView text = (TextView)dialog.findViewById(R.id.textView);