Android学習心得第二課

12642 ワード

一週間近くかけてやっと慕の授業のAndroid第1シーズンを見終わったので、ここであのamos先生に広告を打たなければなりません.本当に素晴らしいです.私が今週勉強したいくつかの点を直接まとめましょう.第1部ToggleButton ToggleButtonは、次の例で説明するように、複数の状態のボタンであり、このボタンによって1つの状態の切り替えが可能である.
    public class MainActivity extends Activity {

    private ToggleButton tb;
    private ImageView imgv;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     tb = (ToggleButton) findViewById(R.id.toggleButton1);
     imgv = (ImageView) findViewById(R.id.imageView1);
//     tb     ,              
     tb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
             /* *  tb               * ButtonView           *                                * isChecked              *      tb   ,  img    */
    public void onCheckedChanged(CompoundButton ButtonView, boolean isChecked) {
        imgv.setBackgroundResource(isChecked?R.drawable.on:R.drawable.off);
    }

    });
    }


}

ここでtogglebuttonの役割は、このボタンをクリックすることで背景画像の変化を実現することであり、setBackgroundResourceという関数はこの機能を実現することである.ここで筆者はとてもおかしい間違いを犯したことがあります.まずxmlプロファイルを載せます.
 <ImageView  android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignLeft="@+id/toggleButton1" android:layout_below="@+id/toggleButton1" android:background="@drawable/off" />

筆者が最初に書いた時にandroid:background="@drawable/off"という言葉をandroid:src="@drawable/off"と書いた結果、本来のbuttonが状態を切り替える役割を果たせなかったことが判明し、幸いにも他人の注意を得て、筆者はこの簡単な間違いで午後、srcとbackgroundResourceの設定画像では効果的に見えますが、srcでは上のjavaコードのsetBackgroundResource関数が機能しないことに気づきました.これからの勉強では、この点に注意しなければなりません.
第2部CheckBoxとRadioGroupおよびRadioButtonの部分は比較的簡単で、特に説明できるものは何もありません.少し挙げるとcheckboxとRadioButtonはある程度対立しています.checkboxは一般的に多くの選択に使われています.例えば、ウェブサイトではどのような知識に興味があるかをよく聞かれます.このとき、下の選択ボックスはcheckboxですが、RadioButtonは主にラジオのボタンとして使われています.例えば、サイトでは性別を記入させることがよくありますが、これはRadioButtonを使う必要があります.人の性別は一つしかないからです.次はそれぞれ2つの異なるボタンのコードを載せて、まずcheckboxです
public class MainActivity extends Activity {
    private CheckBox checkBox;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //       
        checkBox = (CheckBox) findViewById(R.id.checkBox1);
        /* * checkbox         checkbox      */
        checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
               System.out.println(isChecked);
                if(isChecked){
                   //  checkbox     
                    String text = checkBox.getText().toString();
                    Log.i("tag", text);
                }

            }
        });
    }

続いてRadioButton
public class MainActivity extends Activity {
    private RadioGroup rg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rg = (RadioGroup) findViewById(R.id.radioGroup1);
        /* *  radiogroup     */
        rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                case R.id.radio0:
                    Log.i("tag", "      ");
                    break;
                case R.id.radio1:
                    Log.i("tag", "      ");
                default:
                    break;
                }

            }
        });
    }




}

第3部のIntent実装ページのジャンプこれは私が今週学んだ最も重要な点であり、Androidの各インタフェース間は相互に関連しており、1つのアプリケーションが1つのインタフェースしか書けないので、これらのインタフェースが相互間のジャンプを実現するにはIntentに頼って実装する必要があります.
Intentは異なるコンポーネント間の相互通信の絆であり,異なるコンポーネント間の通信の条件をカプセル化している.Intent自体は、目的(Goal)や期待(Expectation)を表す1つのカテゴリ(Class)として定義され、その所望のサービスや動作、動作に関するデータなどを述べる.AndroidはこのIntentオブジェクトの記述に基づいて、ペアリングを担当し、似合うコンポーネントを見つけ、見つけたコンポーネントにIntentオブジェクトを渡すと、Androidのメディアタスクが完了します.この話はcsdnのある大神のブログから来て、個人的にはIntentの説明が十分に行き届いていると感じて、ここで引用してみんなの参考にします.一般にIntentを用いた場合,ページのジャンプを実現する方法は2つあり,1つは戻り値のないページジャンプ,もう1つは戻り値のあるページジャンプである.ここでは,それぞれ2つの方式について,戻り値を持たないジャンプ方式を紹介する.
public class FActivity extends Activity{
    private Button bt1;
    protected void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.factivity);

         bt1 = (Button) findViewById(R.id.button1_first);    

         //        
         bt1.setOnClickListener(new OnClickListener() {         
            public void onClick(View v) {
                /* *1.    startActivity         *2.Intent                *3.               *4.     */
                Intent intent = new Intent(FActivity.this, SActivity.class);
                startActivity(intent);
            }
        });
}

startActivityメソッドは、戻り値のないジャンプを実現するために使用され、intentオブジェクトが返されます.戻り値付きジャンプ方式
public class FActivity extends Activity{
    private Button bt2;
    private TextView tv;
    protected void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.factivity);


         bt2 = (Button) findViewById(R.id.button2_second);
         tv = (TextView) findViewById(R.id.textView1);
         /* *              ,startActivityForResult          * startActivityForResult              *          */
        bt2.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
             Intent intent = new Intent(FActivity.this,SActivity.class);
             startActivityForResult(intent, 1);
            }
        }); 
     }
    /* * requestCode---          * resultCode----         * data-----           */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1 && resultCode==2){
            String content = data.getStringExtra("data");
            tv.setText(content);
        }
    } 
}

ここで2ページ目にも対応する反応が必要です
public class SActivity extends Activity{
    private Button bt1_second;
    private String res = "  ";  
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sacivity);
        bt1_second = (Button) findViewById(R.id.button1);
        bt1_second.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
            //                     intent   
                Intent data = new Intent();
                data.putExtra("data",res);
            // data        ,        
                setResult(2, data);
            //       
                finish();
            }
        });
    }

このfinish関数はjavaの破壊された関数に相当し、メモリリソースを節約することができます.startActivity ForResultという関数は、戻り値のあるIntentのジャンプを実現するために使用されます.requestCode、resultCodeの2つのパラメータは、1つのプログラムの論理がある程度複雑になると、この2つのパラメータは、誰がどのページにジャンプする必要があるかを識別することができます.