2017年1月31日 星期二

迷你備忘錄練習-Android

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();
    }

}

Excel巨集應用-篩選

不太會用公式
但是我會用巨集阿哇哈哈哈
留作紀錄下次不用重打了

Sub 篩選()
Dim R, C As Integer
R = 2: C = 6:
Do While Cells(R, C).Value <> ""
If Cells(R, C).Value <> "桃園專車" And Cells(R, C + 1).Value <> "桃園專車" Then
Rows(R).Delete Shift:=xlUp
Else: R = R + 1
End If:
Loop:
End Sub