Android学习笔记 2014.03.12
这两天系统接触了一下Android在Eclipse的环境下开发,遇到一些初学者遇到的问题在此总结:
一,Activity和LayOut的关系
Activity 与Layout是多对多的关系. 但在运行时貌似只能有一个活动中的Activity
在代码中我新建了一个Activity类用来分别哪个RadioButton被选中,前提是已经有一个主要Activity类,名称为TestProc
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.exerciseproc" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".TestProc" android:label="@string/title_activity_test_proc" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
然后就新建了如下类
package com.example.exerciseproc; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; public class RadioChecketLsn extends Activity implements OnCheckedChangeListener { private RadioButton rb1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_proc); rb1 = (RadioButton)findViewById(R.id.radioButton1); RadioGroup group = (RadioGroup)findViewById(R.id.radioGroup); group.setOnCheckedChangeListener(this); } public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub //获取变更后的选中项的ID try { if(rb1.getId()==checkedId) { Log.d("RadioButtonGrop","第一个选中"); ((EditText) findViewById(R.id.TxtPort)).setText("51208"); } else { Log.d("RadioButtonGrop","第二个选中"); ((EditText) findViewById(R.id.TxtPort)).setText("51207"); } } catch(Exception ex) { Log.d("RadioButtonGrop", ex.getMessage()); } } }
在这个类中我无法通过findViewById获取到layout中的RadioButton的实例,我犯了以下低级错误:
第一,起初在建立这个类的时候没有重写onCreate函数,而是直接在OnCheckedChangeListener事件中来取值,
第二,在OnCheckedChangeListener中我想通过之前运行的TestProc来获取RadioButton,但是后来才弄明白,一个Activity相当于一个类..我在一个新的Activity中调用已有的还不大会,所以我试了重新定义再获取一次,于是有了rb1
第三,于是我想到了在TestProc中找到RadioGroup,用它来注册现在这个类RadioChecketLsn的实例来实现监听OnCheckedChangeListener
RadioGroup group = (RadioGroup)findViewById(R.id.radioGroup); group.setOnCheckedChangeListener(new RadioChecketLsn());
这么写的确是没问题了 也没有错,但是在运行中,findViewById无论如何获取到的都是空,原来两个Activity是可以公用一个layout但是在运行的时候不能同时用?这是比较疑惑的一点
第四,后来放弃了上面这个类,重新回到TestProc中继承了OnCheckedChangeListener问题解决..
public class TestProc extends Activity implements OnClickListener,OnCheckedChangeListener
如此绕了一个圈,其中还试过一个方法,在AndroidMainfest中配置我新加的这个activity,然后在TestProc的OnCreate 里让这个RadioChecketLsn跑起来,用到
Intent intent =new Intent(TestProc.this,RadioChecketLsn.class); startActivity(intent);
findViewById起作用了,其中的RadioButton是找到了,但是从这之后我的按钮的OnClickListener不起作用了,OnCreat中起的两个线程貌似也停止工作了,于是我想到了如上所述的,是否只能有一个Activity在运行时使用layout,但在编码时它们可以共用..
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。