-1

SimpleCursorAdapter の行レイアウトを使用して、レイアウトに 2 つの TextView があります。TextView には、SimpleCursorAdapter から値が設定されています。

最初のビューにはコンピューター ホストの名前が表示されますが、2 番目のビューにはホストの mac アドレスが表示されます。現在、データベースには 16 進形式の文字列として保存されています。

私がしたいのは、データベースにMACアドレスのフォーマットを持たず、カスタムTextViewまたはその他の動作するものを使用してプログラムでフォーマットすることです。したがって、基本的に AABBCCEEFF00 は、SimpleCursorAdapter がその TextView 拡張クラスにデータを入力すると、AA:BB:CC:EE:FF:00 になります。

これを進める最善の方法は何ですか?カスタム TextView を使用する場合、コードをどこにプラグインする必要がありますか?

View Binding への参照も見ましたか? しかし、それが進むべき道かどうかはわかりませんが、私はコードをモジュール化することに非常に熱心であり、単純なクラスを拡張できる場合は複雑なコードをオーバーライドしません。

4

2 に答える 2

1

あなたの質問を理解できる限り、プログラムで AABBCCDDEEFF を AA:BB:CC:DD:EE:FF に変換したいのですが、質問がわからなかったら教えてください。

次のコードを見てください。ここから、関数を呼び出してフォーマットされた mac を取得します。

String formattedMac = new String();
formattedMac=getFormattedMac("AABBCCDDEEFF");
Log.e("formatted Mac", formattedMac);//it will be look like, AA:BB:CC:DD:EE:FF

フォーマットされた mac を返す関数は次のとおりです。

    private String getFormattedMac(String mac) {
    String result = new String();
    result="";
    int start=0;
    int end=2;
    int max=mac.length()+2;

    while(end<max)
    {
        result = result+mac.substring(start, end);
        if(end<mac.length())
        {
            result = result+":";
        }
        Log.e("result", result);
        start=start+2;
        end=end+2;
    }

    return result;
}
于 2013-01-20T05:28:12.390 に答える
0

最良の方法は ViewBinder セットアップであることがわかりました。最終的にこの回答に従いました。

Android、SimpleCursorAdapter を使用して文字列だけでなく色を設定する

これを知ったら、列を VarChar ではなく Blob に変更して、少し見やすくしました。

    SimpleCursorAdapter.ViewBinder binder = new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            String name = cursor.getColumnName(columnIndex);
            if ("mac_address".equals(name)) {
                byte[] macAddress = cursor.getBlob(columnIndex);
                TextView textView = (TextView)view;
                textView.setText(Target.getMacAddress(macAddress));
                return true;
            }
            return false;
        }
    };
于 2013-01-20T16:49:26.363 に答える