Android設計真的是說難好像也還好
說簡單好像又不是那麼簡單
這個小範例包括:
1. ListView選項動態控制
2. 跨頁面傳值
主要是這兩個
至於監聽我在C#好像很少用到這個概念?(還是其實有哈哈哈學藝不精)
反正也是做個小小記錄
因為前面練習監聽設計的範例有點簡單哈哈哈(單純不想打開專案)
然後這個範例
不 能 存 檔 !!!
而且只有六格
所以基本上關掉備忘錄就不見拉
沒有實際用途
開始先拉畫面嚕沒什麼難度
介紹一下
Android的畫面是XML寫的
activity_main.xml就是畫面排版阿樣式設計阿放的地方
MainActivity,java是主程式的檔案
string.xml是放一些activity_main.xml會用到的文字或陣列
像是標題 "迷你備忘錄" 就是放在那裏
檔案大概的位置這樣
重點一來拉~
我要來做ListView選項動態控制
我的ListView的id是LV_tatle //這個是在activity_main.xml設定
然後程式的部分 //被馬掉的部分代表還沒介紹到先打的
來喔文字檔一一介紹:(綠字是自己要打的,黃字是打完會產生的,紅字是講解)
public class MainActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener//你需要用到的監聽
{
ListView LV; //新增一個物件
String[] item; //我需要的項目字串陣列
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
LV=(ListView)findViewById(R.id.LV_tatle);//就...找到那個id...反正就那樣//這常用喔
LV.setOnItemClickListener(this);//監聽按一下項目事件
LV.setOnItemLongClickListener(this);//監聽長按項目事件
item=new String[]{"1.","2.","3.","4.","5.","6."};//設定項目字串
LV.setAdapter(new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,item));//用ArrayAdapter<String>來把陣列設定進ListView的項目裡
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//按一下項目要做的事
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
return false;
//長按項目要做的事
}
}
好了
來整理一下
使用ListView可以用些什麼(只說程式要寫什麼,樣式不管我不會)
1. 先新增一個ListView物件,指向你介面的那個ListView
ListView LV=(ListView)findViewById(R.id.LV_tatle);
2. 需要做監聽
(1)implements AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener
(2)LV.setOnItemClickListener(this);//監聽按一下項目事件
LV.setOnItemLongClickListener(this);//監聽長按項目事件
3. 動態設定項目
(1)要有一個陣列
(2)要有一個ArrayAdapter<???(資料型別)> ArrayAdapter_=
new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,你的陣列名稱)
(3) LV.setAdapter(ArrayAdapter_);
好啦不難吧
再來做跨頁面傳值
先要新增一個頁面
就是按一下ListView的選項會跳到的編輯頁面
然後就取名字
看心情高興改就改吧反正我是沒改
再來介紹程式碼的部分:
先說簡單版的
就是第一頁有傳值給第二頁
可是第二頁沒有要回傳給第一頁的時候
在MainActivity,java//第一頁的程式
Intent It=new Intent(this, Main2Activity.class);
It.putExtra("item",1); //要傳的值是1的話,不一定要數字,字串也可
startActivity(It); //打開第二頁
在Main2Activity,java//第二頁的程式
Intent It=getIntent(); //把自己打開(應該...吧
note=It.getStringExtra("item"); //取得傳過來的值
finish(); //結束第二頁,回第一頁
這次要用的是要回傳的
反正就是會有多一個識別碼
然後多一個事件
至於識別碼跟事件的關聯還沒研究
之後了解了再做更新
在MainActivity,java//第一頁的程式
It.putExtra("note",item[position]);
startActivityForResult(It,position);//startActivity(It); 原本是這個,換一個加上識別碼的
protected void onActivityResult(int requestCode,int resultCode,Intent it){
if(resultCode==RESULT_OK){//如果回傳OK的話
item[requestCode]=it.getStringExtra("note");
AA.notifyDataSetChanged();//LV的Array更新陣列
}
}
在Main2Activity,java//第二頁的程式
Intent It=getIntent(); //一樣打開自己
note=It.getStringExtra("note");//取得傳來的值
Intent it2=new Intent(); //要傳回去噠
it2.putExtra("note",txv_id.getText()+" "+ET_note.getText()); //要傳回去的值
setResult(RESULT_OK,it2); //如果確定要傳回去了,附加一個OK
setResult(RESULT_CANCELED);//如果沒有值要回傳
finish();
全部全部程式碼來嚕~
先上圖
程式 文字檔:
MainActivity.java
package com.example.aa206.a0201_1;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener{
ListView LV;
Intent It;
ArrayAdapter<String> AA;
String[] item;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
It=new Intent(this, Main2Activity.class);
LV=(ListView)findViewById(R.id.LV_menu);
LV.setOnItemClickListener(this);
LV.setOnItemLongClickListener(this);
item=new String[]{"1.","2.","3.","4.","5.","6."};
AA=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,item);
LV.setAdapter(AA);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
It.putExtra("note",item[position]);
startActivityForResult(It,position);
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
item[position]=position+".";
AA.notifyDataSetChanged();
return false;
}
protected void onActivityResult(int requestCode,int resultCode,Intent it){
if(resultCode==RESULT_OK){
item[requestCode]=it.getStringExtra("note");
AA.notifyDataSetChanged();
}
}
}
Main2Activity.java
package com.example.aa206.a0201_1;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
TextView txv_id;
EditText ET_note;
int id;
String note;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//
txv_id=(TextView)findViewById(R.id.txv_id);
ET_note=(EditText)findViewById(R.id.eT_note);
//
Intent It=getIntent();
note=It.getStringExtra("note");
//
txv_id.setText(note.substring(0,2));
if(note.length()>3)
ET_note.setText(note.substring(3));
}
public void onSave(View v){
Intent it2=new Intent();
it2.putExtra("note",txv_id.getText()+" "+ET_note.getText());
setResult(RESULT_OK,it2);
finish();
}
public void onCancel(View v){
setResult(RESULT_CANCELED);
finish();
}
}