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,但在编码时它们可以共用..

Android学习笔记 2014.03.12,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。