kojisiの技術ノート

開発系SEに転職した未熟者の勉強記録

RecyclerViewのあれこれ

簡単な例で理解(下は例の処理解説)

①MainActivityが生成される

②Activityのレイアウト(xml)を読み込む

③Activityのレイアウト(xml)からRecyclerViewの表示場所を読み込む

④adapterを生成する  RecyclerView用のレイアウトを取得する

⑤public RecyclerAdapter.ViewHolder onCreateViewHolder(  のような記述でViewHolderを生成する

⑥onBindViewHolderでデータをviewに紐付け

⑦紐付けたデータを持つadapterをRecycler.setAdapter(~)して表示する

※注意事項 1行分のレイアウトを作成して、それが繰り返し表示される adapterとViewHolderが必須 adapterでクリックされた通知を受けとってFragmentに返す

細かいところの理解とかサンプル作りは今度! 先人様たちのサイトを見たけどなかなか理解して自分の中に落とし込むのが難しい、、、

■参考

RecyclerViewの基本 - Qiita

■参考2

【Android】RecyclerViewの基本的な実装 - Qiita

■参考3

RecyclerView と view type について (Android アプリ開発) - ひだまりソケットは壊れない

フラグメント(Fragment)について

①Activityの上にFragmentは生成する

②最初はActivityから呼び出す。
→Fragmentはその上に重ねても(add)置換えてもいい(replace)
  (置換えた場合、addToBackStackで前画面を保持できる)

③ボタンクリックで呼び出す場合、
 onClickをメソドで実装する場合、xmlで定義してActivityで実装する方法と、
 FragmentにsetOnClickListenerで実装する方法がある。

メインアクティビティのonCreateで、
xmlファイルを読み込む。
setContentView(R.layout.fragment_layout);
↓
<fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
            android:id="@+id/titles" android:layout_weight="1"
            android:layout_width="0px" android:layout_height="match_parent" /><br>
このレイアウトを使って、アクティビティがレイアウトを読み込むとすぐにシステムが TitlesFragment(これが劇のタイトルをリストします)のインスタンスを作成します。

■参考

qiita.com

■サンプル

github.com

データバインディングについて

DataBinding使う方法

①xmlで”@{user.name}"のようにバインドするものを定義する

②ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
 binding.setUser(mUser);
    のように、MainActivityなどの制御側でバインドのインスタンスを取得

③actinvityやFragment、Interfaceからxmlを呼び出すには、
 xmlないで<variable>を定義する
  <variable name="user" type="com.example.databinding.User" />
■以下、サンプル

https://github.com/takuyakojima2/MySampleBinding

参考ページ https://qiita.com/t_sakaguchi/items/a83910a990e64f4dbdf1

Androidのあれこれ

Androidのこと全く知らないから調べら事とかまとめていく

  • アクティビティ

    画面を構成する基本的なクラスの事

  • Fragment

    コンテンツとライフサイクルを持ったビュー <引用元:

qiita.com

  • Adapter

    ListViewに表示する項目は「アダプター(Adapter)」と呼ばれるものをセットすることで表示されます。

Activity・Fragment・Adapterについて

基本的な画面表示はActivity、 ボタンやテキストの表示といった細かなビューの処理を行う画面表示はFragment、 リスト項目の画面表示はAdapter  と、ザックリ分けておけば良いかな。細かいのは開発していく中で理解を深める感じで。

  • ListView

    複数のViewを表示するのにすぐれています。 縦に長いViewをスクロースさせて表示させるのに、「ScrollView」(ViewGroup)を使うことがありますが、実はListViewはそのScrollViewの子クラスとなります。

  • onCreate

    画面が起動された時に最初に呼び出される

  • R.java

    プロジェクトに設置したリソースをプログラムの中から利用するため、各リソースにはリソースIDが割り当てられます。リソースIDは「R.java」と言う名前のファイルで管理されます。R.java」ファイルは初めてプロジェクトをビルドした時に作成され、その後ビルドが行われるたびに自動的に更新されていきます。その為、ユーザーはリソースの追加だけを行っておけばリソースに対するIDの管理などは行う必要がありません。

ファイル取り込み・編集・出力処理

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class sourceEdit {
    public static void main(String args[]){
        try{
            File file = new File("");
            String dire="";
            //引数で読み込むファイルっをフルパスで指定する
            if(args.length == 0 || args[0]==null){
                System.out.print("引数が不正です");
                System.exit(0);
            }else{
                dire=args[0];
            }
            file = new File(dire);
            //ファイルの存在チェック
            if (checkBeforeReadfile(file)){
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"Shift-JIS"));
                //ファイルの出力先
                File rwfile = new File("D:\0_work\html\burogu.txt");
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(rwfile),"UTF-8"));
                String str;
                //半角スペースの置き換え
                String hanspace = " ";
                //文末に改行の追加
                String kaigyo =" ";
                while((str=br.readLine()) != null){
                    //編集後文字列格納用変数
                    String result = null;
                    Pattern p = Pattern.compile(hanspace);
                    Matcher m = p.matcher(str);
                    if(m.find()){
                        //半角スペースの置き換え処理
                        result = m.replaceAll(" ");
                    }else{
                        //何もない時は末尾に改行だけつける
                        result = str;
                    }

                    bw.write(result+kaigyo);
                    bw.newLine();
                }
                br.close();
                bw.close();
                System.out.print("編集処理が正常に完了しました。\n");
                System.out.print("ファイルの出力先はD:\0_work\dekitakotonote\test.txtです");
            }else{
                System.out.println("ファイルが見つからないか開けません");
            }
        }catch(FileNotFoundException e){
            System.out.println(e);
        }catch(IOException e){
            System.out.println(e);
        }
    }

    private static boolean checkBeforeReadfile(File file){
        if (file.exists()){
            if (file.isFile() && file.canRead()){
                return true;
              }
            }

        return false;
    }
}

DBから複数項目を複数行取得する

■呼び出し元 主宣言等省略

ArrayList<HashMap<Strig,String>> lstuserdate = new ArrayList<HashMap<Strig,String>>();
lstuserdate = selUserMst(string文字);
for(HashMap<String,String>getList : lstuserdate){
//DBから取得した件数分繰り返す
     (String)getList .(USER_ID)
}

■dao 主宣言等省略

pubulic ArrayList<HashMap<String,String> selUserMst(String string文字)throw〜{
ArrayList<HashMap<Strig,String>> resultset = new ArrayList<HashMap<Strig,String>>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
    StringBuilder sqlstr = new StringBuilder();
    sqlstr.append("SELECT");
    sqlstr.append(" USER_ID,USER_NAME");
    sqlstr.append(" from USER_MST");
    sqlstr.append(" WHERE USER_ID = ?");
    pstmt=con.prepareStatement(sqlstr.toString());
    pstmt.setString(1, string文字);
    rs = pstmt.executeQuery();
    while(rs.next()){
       ArrayList<HashMap<Strig,String>> data = new ArrayList<HashMap<Strig,String>>();
       data.put(USER_ID,rs.getString(USER_ID));
       data.put(USER_NAME,rs.getString(USER_NAME));
       resultset.add(data);
    }
 〜

 

ArrayListのなかにHashMapをいれて、さらにその中にArrayListとHashMapをいれるというやり方。そこまで思い至らなかった。。。

SQLPlusとか

基本的なSELECT文、UPDATE文などや、SQLPlusを使ってcmdから操作する際の使えそうなコマンドとか一覧!

 

①bat からDBに接続する

実行するフォルダに移動

cd /d D:\work  

sqlplus ユーザ名/パスワード@ネットサービス名

----------------------------------------------------------

SQL

set serveroutput on
set echo on
set linesize 100
set TRIMSPOOL on
col USER_ID format a8
col USER_NAME format a10
col MAIL_ADDRESS format a10
spool test.txt
select USER_ID,USER_NAME,MAIL_ADDRESS
from USER_MST;
spool off

------------------------------------------------