`
linxiwd
  • 浏览: 8294 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

findViewById()调用组件返回null,getText()无法执行,程序未报错

阅读更多
下面的程序是创建一个对话框,有两个EditText组件,用于填写RSS名称和RSS地址,点击按钮获取输入的数据。
第十二行、十三行代码要注意。
EditText nameText = (EditText)view.findViewById(R.id.rss_name_edit);
EditText addressText = (EditText)view.findViewById(R.id.rss_address_edit);
这一句代码,不能直接用
EditText nameText = (EditText)findViewById(R.id.rss_name_edit);
 这样nameText只能得到null值。接下来的getText()自然执行不下去了。而且程序不会报错。
因为findViewId是默认在当前activity的默认布局文件寻找该组件的。
应当将该组件所在的布局文件定义出来,再通过该布局文件获取组件。
如下:
LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.add_rss, null);
EditText nameText = (EditText)view.findViewById(R.id.rss_name_edit);
源程序如下:
private Dialog builderDialog1(Context context) {
		LayoutInflater inflater = LayoutInflater.from(context);
		final View view = inflater.inflate(R.layout.add_rss, null);

		AlertDialog.Builder dialog = new AlertDialog.Builder(context);
		dialog.setIcon(R.drawable.add);
		dialog.setTitle(R.string.dialog_input_rss_name);
		dialog.setView(view);
		
		dialog.setPositiveButton(R.string.alert_ok, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				EditText nameText = (EditText)view.findViewById(R.id.rss_name_edit);
				EditText addressText = (EditText)view.findViewById(R.id.rss_address_edit);
	
				String rss_name = nameText.getText().toString();
				String rss_url = addressText.getText().toString();
				
				if(rss_name.equals("")) {
					Toast.makeText(ActivityRssList.this, ":( RSS名称不能为空!", Toast.LENGTH_SHORT).show();
				}
				else if(!URLUtil.isNetworkUrl(rss_url)) {
					Toast.makeText(ActivityRssList.this, ":( RSS地址格式不正确!", Toast.LENGTH_SHORT).show();
				}
				else {
					if(dbAdapter.saveRSS(rss_url, rss_name, type_id)) {
						Toast.makeText(ActivityRssList.this, "添加成功:)!", Toast.LENGTH_SHORT).show();
					}
					else {
						Toast.makeText(ActivityRssList.this, "对不起,添加失败了:( 请重新添加!", Toast.LENGTH_SHORT).show();
					}
				}
				
				showRSSList(); //刷新rss列表
			}
		});
		
		dialog.setNegativeButton(R.string.alert_cancel, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
			}
		});
		return dialog.create();
	}
0
0
分享到:
评论

相关推荐

    —Android发送短信程序[收集].pdf

    在Android平台上,开发一个能够发送短信的程序是一个常见的需求,尤其对于那些希望构建通信功能的应用来说。本教程将详细介绍如何创建一个简单的Android应用,用于发送短信。我们将遵循以下几个步骤: 1. **创建...

    SQLiteDemo

    null, null, null, null, null); return this.convertToPeople(results);//将results传给convertToPeople方法中的形参,并将peoples数组的值返回 } public People_mll[] queryIdData(long id){//定义一个类型...

    android基础

    如果需要向调用者返回数据,可以使用`setResult()`方法。示例代码如下: ```java // 设置返回结果 Intent data = new Intent(); data.putExtra("result", "some result data"); setResult(RESULT_OK, data); ...

    android实战 保存QQ密码(android studio源程序工程)

    String password = findViewById(R.id.password_edittext).getText().toString(); savePassword(password); // 调用上面的保存方法 } }); findViewById(R.id.load_button).setOnClickListener(new View....

    浅谈使用Android中ListView组件.pdf

    - 使用ViewHolder模式,减少findViewById的调用。 - 使用AsyncTask或Loader异步加载数据,避免UI阻塞。 - 使用SparseBooleanArray记录已选中的项,而不是在列表项中保存状态,减少内存占用。 - 在数据量较大时,考虑...

    Android 开发,编程建立一个简单的进程内服务,实现比较两个整数大小的功能。服务提供Int Compare(Int, Int

    在Android开发中,服务(Service)是一种特殊类型的组件,它可以在后台长时间运行,即使用户界面已经关闭。在本例中,我们将创建一个进程内的服务,其主要任务是接收两个整数参数并比较它们的大小。服务会提供一个名...

    安卓记事本

    * 6,对返回按钮监听退出程序 */ public class MainActivity extends Activity { // 定义帮助类 private MyOpenHelper notesDB; // 定义数据库类 private SQLiteDatabase dbReader;// 读取 // 定义组件 ...

    实现微信对话列

    `ViewHolder`模式是为了减少findViewById的调用,提高性能。 此外,为了实现类似微信的效果,我们还需要处理一些细节,比如: 1. 根据消息的方向(发送或接收)来调整布局的对齐方式。 2. 添加消息气泡的背景,...

    android 通用的ViewHolder实现

    `ViewHolder`模式就是为了解决这个问题而设计的一种优化策略,它主要应用于`ListView`、`RecyclerView`等列表组件。本篇文章将详细介绍`ViewHolder`的概念,它的实现方式,以及如何在实际项目中应用。 `ViewHolder`...

    android 短信发送

    没有这个权限,应用将无法执行短信发送操作。 接下来,我们来看如何创建发送短信的UI。通常,会有一个EditText用于输入短信内容,一个Button用于触发发送操作。在布局XML文件中,可以这样定义它们: ```xml ...

    Android应用程序中读写txt文本文件的基本方法讲解

    在Android应用程序中,读写txt文本文件是常见的需求,特别是在数据持久化或用户交互时。本文将详细讲解如何使用`context.openFileInput()`和`context.openFileOutput()`这两个方法来实现这一功能。这两个方法属于`...

    026_android UI组件之 AlertDialog的自定义布局

    在Android开发中,UI组件是构建用户界面的关键部分,其中包括各种对话框,如AlertDialog。`AlertDialog`是一个轻量级的对话框,用于显示警告、确认或提供简单的选择给用户。本教程将深入探讨如何自定义`AlertDialog`...

    android简单计算器代码

    在Android平台上开发一个简单的计算器应用是一项基础而实用的任务,它能帮助我们理解Android应用程序的基本架构、UI设计以及事件处理机制。下面将详细讲解这个过程,包括主要涉及的技术点和步骤。 首先,Android...

    android SQLite实现本地登录注册功能,SQLite简单应用(android studio)

    `onCreate()`用于首次创建数据库时执行的初始化操作,而`onUpgrade()`则在数据库版本升级时被调用。 ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME...

    android新手数据之SQLite数据库存储

    4. **查询(Query)**:使用`query()`方法获取数据,结果通常以Cursor对象返回。遍历Cursor并显示数据,例如在ListView或RecyclerView中。 例如,查询按钮的点击事件可能如下: ```java Button queryBtn = ...

    Android SQLite数据库小例子

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、嵌入式的数据库,非常适合用于存储应用程序中的数据。本教程将通过一个简单的“SQLiteDemo”实例,讲解如何在Android中实现SQLite数据库的注册...

    新建 DOC 文档.doc

    - `Fragment`是Android应用程序组件,它可以在Activity中运行,允许你创建动态和灵活的用户界面。在本例中,`HomeFragment`继承自`Fragment`,并实现了特定的行为。 2. **Data Binding库**: - 使用`...

    安卓学习资料之发短信给其他手机的代码

    没有这个权限,应用将无法执行发送短信的操作。 接下来,我们来创建一个用于发送短信的Activity。首先,我们需要一个用户界面,通常包含一个输入框(EditText)用于输入电话号码和短信内容,以及一个按钮(Button)...

    安卓短信发送例子

    当用户给予许可后,`onRequestPermissionsResult()`方法会被调用,此时我们继续执行`sendSMS()`方法来发送短信。`sendTextMessage()`函数是发送短信的关键,它接受电话号码、消息内容、发送者、回复地址和额外的回调...

    ListView多布局实现

    在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。ListView的魅力在于其高效的数据复用机制,通过convertView可以减少视图的创建,提高性能。然而,有时我们可能需要在一个ListView中显示不同...

Global site tag (gtag.js) - Google Analytics