職業訓練校での半年間

2013/10月中旬から半年間の記録を書き留める予定。
http://android.wktk.so/ があるのを知って開始しました。

2013年12月

さて午後。
#「onActivityResult()」は後で調べよう。

★ページ遷移+計算
WS000009WS000010 出来たには出来たけど、普通すぎる、、、
[MainActivity.java]
public class MainActivity extends Activity {
  EditText et1;
  EditText et2;
  Button btn1;
  Button btn2;
  Button btn3;
  Button btn4;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    findView();
    addEvent();
  }

  private void findView() {
    et1 = (EditText)findViewById(R.id.editText1);
    et2 = (EditText)findViewById(R.id.editText2);
    btn1 = (Button)findViewById(R.id.button1);
    btn2 = (Button)findViewById(R.id.button2);
    btn3 = (Button)findViewById(R.id.button3);
    btn4 = (Button)findViewById(R.id.button4);
  }

  private void addEvent() {
    btn1.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) { a(1); }
    });
    btn2.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) { a(2); }
    });
    btn3.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) { a(3); }
    });
    btn4.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) { a(4); }
    });    
  }

  public void a(int mathMarkNum){
    //数値を取得
    int num1 = Integer.parseInt(et1.getText().toString());
    int num2 = Integer.parseInt(et2.getText().toString());
    int sum = 0;
    switch(mathMarkNum){
      case 1:
        sum = num1+num2;
        break;
      case 2:
        sum = num1-num2;
        break;
      case 3:
        sum = num1*num2;
        break;
      case 4:
        sum = num1/num2;
        break;
    }
    Intent i = new Intent(MainActivity.this, ResultActivity.class);
    i.putExtra("NUM", sum+"");
    startActivity(i);
  }
}
[ResultActivity.java]
public class ResultActivity extends Activity {

  TextView tv;
  Button bt;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_result);

    findView();
    addEvent();
  }

  private void findView() {
    tv = (TextView)findViewById(R.id.textView1);
    bt = (Button)findViewById(R.id.button1);
    Intent i= this.getIntent();
    String num = i.getStringExtra("NUM");
    tv.setText(num);
  }

  private void addEvent() {
    bt.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        finish();
      }
    });
  }
}



あれ、ボタンを1まとめに出来るんだ・・・
public class MainActivity extends Activity implements OnClickListener{
  EditText et1;
  EditText et2;
  Button btAdd;
  Button btSub;
  Button btMul;
  Button btDiv;
  int ans;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findView();
  }

  private void findView() {
    et1=(EditText)findViewById(R.id.editText1);
    et2=(EditText)findViewById(R.id.editText2);
    btAdd=(Button)findViewById(R.id.button1);
    btAdd.setOnClickListener(this);
    btSub=(Button)findViewById(R.id.button2);
    btSub.setOnClickListener(this);
    btMul=(Button)findViewById(R.id.button3);
    btMul.setOnClickListener(this);
    btDiv=(Button)findViewById(R.id.button4);
    btDiv.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    
    int a=Integer.parseInt(et1.getText().toString());
    int b=Integer.parseInt(et2.getText().toString());
    switch(v.getId()){
    case R.id.button1:
      ans=a+b;
      break;
    case R.id.button2:
      ans=a-b;
      break;
    case R.id.button3:
      ans=a*b;
      break;
    case R.id.button4:
      ans=a/b;
      break;
    }
    
    Intent i=new Intent(MainActivity.this,ResultActivity.class);
    i.putExtra("ans", ans);
    startActivity(i);
  }

}

つぎー
といっても前のページが理解できてれば余裕っす。

★ページ遷移+データ転送 
main側の「EditText」部分に入力した情報をSub側に渡し、
Sub側の「TextView」部分に表示させます。

[MainActivity.xml]                                        [SubActivity.xml]
WS000004WS000005
 

[ActivityMain.java]
public class MainActivity extends Activity {
  Button bt;
  EditText et;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    findView();
    addEvent();
    
  }

  private void findView() {
    bt = (Button)findViewById(R.id.button1);
    et = (EditText)findViewById(R.id.editText1);
  }

  private void addEvent() {
    bt.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        Intent i = new Intent(MainActivity.this, SubActivity.class);
        //入力データを送る。("name"はキーワードなので、名称は何でもOK)
        i.putExtra("name",et.getText().toString());
        startActivity(i);
      }
    });
  }
}

[SubActivity.java]
public class SubActivity extends Activity {
  TextView tv;
  Button btn;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    
    findView();
    addEvent();
  }

  private void findView() {
    tv = (TextView)findViewById(R.id.textView1);
    btn = (Button)findViewById(R.id.button1);
    //MainActivityからIntentで送られてきた情報を取得
    Intent i = this.getIntent();
    //MainActivityでputExtraで指定したキーワードを指定
    String name = i.getStringExtra("name");
    tv.setText("ようこそ" + name + "さん!");
  }

  private void addEvent() {
    btn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        //Intentを終了させる
        finish();
      }
    });
  }
}

昨日休んでしまったので、昨日分はあとで理解してから書きます。
今日でようやく束の間の休息期間に入るし♪


★ページ遷移
Main用プロジェクトファイル生成後、パッケージを選択して
「右クリック→新規→その他→Android→Androidアクティビティー」
はじめのファイル名はMainActivity、今作るのがSubActivityとする。
WS000024

で、Manifest.xmlが下記のようになってたらOK


    
        
        
        
        
    







次に「res/layout配下のxml」っす

WS000002WS000001









さて、Activityの設定すね。
★MainActivity.java
private void addEvent() {
  //ボタンを押下したら実行
  btn.setOnClickListener(new OnClickListener() {      
    @Override
    public void onClick(View v) {
      //引数は”自分自身”、”呼び出し先クラス”
      Intent i = new Intent(MainActivity.this,SubActivity.class);
      //呼び出し先のActivityを実行
      startActivity(i);
    }
  });

  //アプリ終了させてみる
  btn2.setOnClickListener(new OnClickListener() {
  
    @Override
    public void onClick(View v) {
      //MainActivityから実行されたIntentを終了させる
      finish();
    }
  });
}

★SubActivity.java
public class SubActivity extends Activity {

  Button bt;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    
    Log.d("Life","sub_onCreate");
    findView();
    addEvent();
  }

  private void findView() {
    bt = (Button)findViewById(R.id.button1);
  }

  private void addEvent() {
    bt.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        //MainActivityから実行されたIntentを終了させる
        finish();
      }
    });
  }
  
  /********************************
   * ログを吐き出させるため、Overrideしている
   ********************************/
  @Override
  protected void onDestroy() {
    Log.d("Life","sub_onDestroy");
    super.onDestroy();
  }

  @Override
  protected void onPause() {
    Log.d("Life","sub_onPause");
    super.onPause();
  }

  @Override
  protected void onRestart() {
    Log.d("Life","sub_onRestart");
    super.onRestart();
  }

  @Override
  protected void onResume() {
    Log.d("Life","sub_onResume");
    super.onResume();
  }

  @Override
  protected void onStart() {
    Log.d("Life","sub_onStart");
    super.onStart();
  }

  @Override
  protected void onStop() {
    Log.d("Life","sub_onStop");
    super.onStop();
  }  
}


実行後、LogCatを見てみます。
遷移後、まず初めの3行のログが吐き出されます。
そして「メイン画面へ」のボタンを押されると下部赤枠のログが吐き出されます。
→Intentを終了させるfinish()が実行された事を指します。
BlogPaint


 


 こんなの出来るようになるみたい。
(前いってた計算アプリをレベルアップしたVer)
WS000001
























下記本の最初のお題だからサラッと出来ると思ったら
javaソースごついじゃないか ∑ (>_<)
てか、ImageButtonもまだ作ったことないしw
作ればわかる! Androidプログラミング 第2版 -SDK4対応

あとTeacherが下記2冊推してた。
ハードル高いらしいので、せめて手前で説明した本を理解してから見てみよ。
本格アプリを作ろう! Androidプログラミングレシピ 
Androidゲームプログラミング A to Z

 

午後ー。

★ListViewをタップしたら下部に設置してあるTextViewに値を突っ込む
完成系・・・。
無題

<main.xml>
「android:layout_height="300dp"」
と直接指定します。
WS000000











<Vegetable.java>
public class Vegetable {
	String name;
	int price;
	String pref;

	
	public Vegetable(String name,int price,String pref){
		this.name=name;
		this.price=price;
		this.pref=pref;
	}
	
	public String showDisplay(){
		return String.format("%s:%d円(%s)", name,price,pref);	
	}
}


<ActiveMain.java>
public class MainActivity extends Activity {
  ListView lv;
  TextView tv;
  ArrayList<vegetable> vegs=new ArrayList<vegetable>();
  ArrayList<string> names=new ArrayList<string>();
  ArrayAdapter<string> adapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    findView();
    makeData();
    addEvent();
    
  }
  
  private void makeData() {
    //タップされたら表示させる文字を設定
    vegs.add(new Vegetable("人参",100,"千葉"));
    vegs.add(new Vegetable("かぼちゃ",120,"鹿児島"));
    vegs.add(new Vegetable("たまねぎ",89,"埼玉"));
    vegs.add(new Vegetable("白菜",170,"広島"));
    vegs.add(new Vegetable("ナス",120,"群馬"));

    //画面に表示する文字
    for(Vegetable veg:vegs){
      names.add(veg.name);  
    }
  }

  private void findView() {
    tv=(TextView)findViewById(R.id.textView1);
    lv=(ListView)findViewById(R.id.listView1);
    //ListViewに表示する文字、レイアウトの種類を設定
    adapter=new ArrayAdapter<string>(this,android.R.layout.simple_list_item_1,names);
    lv.setAdapter(adapter);
  }
  
  private void addEvent() {
    //ListViewに設定したアイテム(文字)をタップされたら実行
    lv.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> arg0, View view, int position,
          long arg3) {
        //中身、Stringにすること。
        tv.setText(vegs.get(position).showDisplay());
      }
    });
  }
}

デザインパターンって呼ばれるものの1つです。
引数の内訳はこうなってます。
ArrayAdapter<string>(Context context, int textViewResourceId, List<string> objects)

2つめのはAndroidで定義済みレイアウトのIDです。
とりあえずコレ使っておけばOK。
3つめは表示する文字のリストぶちこみます。


なんか今日物覚えってか、頭回らないなと思ったら、
連日の寝不足が原因すね・・・家で寝たらサラっと出来たし(・∀・;)

てか、「?」しかり、「 &#60; /String>」「 &#60; /Vegetable>」タグが
自動生成されて何ぞ!?って思ったら、
特殊記号使えってお達しか・・・。

「?」で兆候あって良かったけど、数値コード頭に入れておこう(^_^;)
http://www.cielion.com/jp/reference/html/special_characters.php 



 

このページのトップヘ