2012年12月31日月曜日

activity_main.out.xml



そう、今日も奴の足音が聞こえる・・・・
プロジェクトをクリーンしてもクリーンしても・・・


activity_main.out.xml
activity_main.out.xml
activity_main.out.xml
activity_main.out.xml
activity_main.out.xml



バイオハザード3の追跡者かお前は。


ということで。
会社で使ってるLet's NoteにAndroidアプリの開発環境を入れました。
うわーいこれで暇なときにプログラム書けるぞー と思いきや、なんかビルドするといつの間にやらこんなんが毎回生成されてビルドできません。
2年ぐらい前に入れた開発環境だとまったくそんなことなかったのにな・・・

まず発生したときの対処法。
普通に削除しても消えないので。

・プロジェクトをクリーン
・出来てるxmlを憎しみと共に削除
・編集中のxmlを全部閉じる
・再ビルド


なんですが、たまに全xmlを閉じてても上記現象が発生します。
困ったなぁ。唯一、-cleanで起動した直後のビルドは発生しないんですが、毎回そんなこともしてられない。うーん


で、http://android96.blog.fc2.com/blog-entry-23.htmlを参考にパッケージエクスプローラ側でxmlソースを「選択(反転)」しないようにビルドすると・・・・おぉ、奴が生成されない。

ただ、今のとここれでなんとか行ってるんですが、それでもたまに現れます。
一応、

・ビルド時にエディタ側でxmlを開かない
・自動的にビルドオプションを外す
・パッケージエクスプローラ側のlayout階層を閉じておく

辺りを心がけたら頻度は下がった・・・かな?

それにしてもなんなのこれ・・・くそー




activity_main.out.xml
activity_main.out.xml
activity_main.out.xml
activity_main.out.xml
activity_main.out.xml

ツール覚書

ツールメモ。

・ネットワーク系

※通信パケット解析、調査
 →WireShark


※帯域制御(プログラム毎)
 →NetLimiter

※無線干渉状況調査
 →InSSider

※Telnetクライアント
 →TeraTerm
 →

※自動Ping+結果確認
 →ExPing



・ベンチマーク系

※USB転送速度
 →CrystalDiskMark

※プロセス詳細情報
 →ProcessExplorer

※USB使用状況(バスパワー等)確認ソフト
 →usbdeview


・復旧系

※マスターブートセクタ書き換えソフト
 →testdisk


・ユーティリティ系

※文字列検索ソフト
 →jgrep

※バイナリエディタ
 →Stirling

※バッチファイルを常駐エグゼ化
 →Batch 2 Exe

windows サービス起動状況変更

windowsサービスの開始状態を変更


sc config サービス名 start= demand

↑は手動に変更
startをauto、disabledでそれぞれ自動、無効

sc config サービス名 start= demand
net start サービス名
net stop サービス名
sc config サービス名 start= disabled

で一連。


2012年10月17日水曜日

win8 インストール 続き

・イベントビューアエラーだらけ


1.IPIRP 29031(システム)

「IPRIP は、システム ルート テーブルにルートを追加できませんでした。 データはエラー コードです。」

そもそもIPRIPって?
 →Win98用のルーティングプロトコル?セグメント外にパケットを流すためのプロトコルなのかな?
  参考:http://support.microsoft.com/kb/194464/ja


windows\system32\drivers\etc\hostsを更新できてないのが原因ぽい。
おそらくアクセス権の問題。
該当ファイルにuserアクセス権をフルコントロールで上げる→ダメ。
そもそも該当サービスがインストールされておらず(C:Windows下に無い)、なぜかレジストリキーのみ入っている状態なので、レジストリキー削除後、再起動。

参考:http://www.higaitaisaku.com/kakolog/cbbs.cgi?mode=al2&number=88192&page=20&rev=1&no=16&KLOG=10

これで出なくなった。


2.SNMP 1500

「レジストリ キー SYSTEM\CurrentControlSet\Services\SNMP\Parameters\TrapConfiguration をアクセスしているときに SNMP サービスはエラーを検出しました。」

問題ないらしい。
参考:http://support.microsoft.com/kb/2002303/ja



・常時メモリ、CPU食う

ファンが回りまくり。
メモリも常に50%↑、CPUも30%↑。

調べてみるとWindows Searchがかなり食ってる。
ファイルにインデックスをつけて検索を高速化するサービスらしいが、邪魔かつ食いすぎなので停止。
サービス→Windows Searchを停止。
これでDPU安定、メモリも30%ぐらいまで落とせた。


とりあえずそんなとこで。
またちまちまいじります。

2012年10月16日火曜日

win8 インストール

ちょいと手が空いたので会社用PCその1にインストール。
Win7に上書きインストールする形。

ちなみにスペックは、

CPU :i5-2450M@4-CPU 2.60Ghz
メモリ :4096
HDD :250GB

といったとこ。
パナソニのCF-SX1の素のまま。


・UI
慣れないとかなり使いづらい。
各設定見るのも画面の隅っこをクイッとスクロールさせて出てくる設定ボタンを押さないといかんのだけど、「クイッ」が結構難しいw
あとスタート画面で右クリックすると出てくる「すべてのアプリ」メニューはProgram Files内読んでるのかな?
ショートカット追加したりしたいんだが、現状方法わからず。調べよう。
プログラムを右クリックして出てくるアンインストールを起動すると、即プログラムの追加と削除が出てくるのは良いと思った。


・起動が早い、シャットダウンが早い。
超早い。7の1/3ぐらい。
動作も体感早い。
ファイルコピー等のアルゴリズムが変わったらしいけどどうなんだろ、試してみたい。

・動作も早い
早いけど、特定のアプリケーションがやたら重い気がする。
特にExcel、Word。


・OutLookがいない
新メニュー→すべてのアプリ内になぜかOutLookがいない。
しょうがないのでコマンド打って起動してるけど、なんでやー


・Lotus Notesが動かなくなった
ディレクトリアクセス権が書き換えられてた。
インストールフォルダのUsersにフルコントロールあげて終了。


・フリーズ
フリーズ発生。
アプリはChromeのタブを10個ほど起動してたぐらい。
突然マウスアイコンが動かなくなる。
タスクマネージャもすべて動かなくなったため、電源長押し。
なんだろうと探してみたところ以下に文献があった。

「Windows8を直す方法」
http://cpplover.blogspot.jp/2012/06/windows-8.html


確かにブラウザでタブ増やしまくると簡単に現象再現するwえーまじで・・・
なのでページファイルを無効化してみた。
とりあえず現時点では問題なし。

2012年10月2日火曜日

Access勉強メモ 10/2 No3

続き続き

ステップ18「販売伝票レポートの作成」

なんかレイアウトいかれてるけど完了。


ステップ19「例題システムの課題」

説明のみなので割愛。



以上で初級編は終了。

とりあえず、

・クエリを基にしてフォームやレポートを作成
・サブフォームの使い方
・イベントプロシージャ定義


辺りは非常に勉強になった。
ただ、項目に対するプルダウンの使い方とか、そのあたりが分からんので引き続き勉強。

2012年10月1日月曜日

Access勉強メモ 10/1 No2

続き。

ステップ8 「復習」

今までのステップと同じ手順でDB、フォーム、レポート、コードを追加。
が、フォームのコードが動かない。
コード自体はコピペ(もちろんプロシージャ名等は直し)だけど、なんでだろう。
多分アホミスだろうなぁ。
一回Access落として開きなおしたら直った。うーん。


ステップ9 「ステップ8の解答」

答えだけなので飛ばし。


ステップ10「販売伝票作成」

飛ばし


ステップ11「販売伝票テーブル作成」

テーブル2つ作って終わり。


ステップ12「販売伝票のクエリ作成」

うーん。
まだデータが入ってないテーブルへオートナンバー型のカラムに対して
「7」を入力しろってサンプルに書いてあるんだけど入らん。そりゃそうだ。

うーん、とりあえず保留。☆。


ステップ13「リレーションシップの作成」

初期ツールバーにいなかったので、メインタブのデータベースツール→リレーションシップで表示。
他で開いてるとリレーション貼れない。作る際に排他ロックかけに行くのだろう。


ステップ14「Access販売伝票フォームの作成」

コントロールソースの書き方、サブフォームの作り方登場。
この辺はかなり勉強になる。
あと相変わらずレイアウトの整形が下手というか苦手。あとで直す。


ステップ15「F03伝票のVBA」
ステップ16「F04明細のVBA」

ステップ17「伝票部分のVBAの解説」

特筆すぺきことはなし、コードの入力のみ。

Docmdをサブフォームで組む際はフォーム名入れちゃダメと。めもめも。

とりあえずここまで。

メモリダンプ解析

クライアントに入れてるサーバが起動時エラー出てるらしいので調査。
ハード保守のパートナー企業に投げちゃえばいいんだけど、勉強のために。


状況

朝一でユーザがサーバ見たら「起動に失敗しました」みたいなエラーダイアログ出てる
OK押したらデスクトップまで行く
起動時に走るタスクが走ってない→ユーザが手動で起動



・イベントビューア

※アプリ

Userenv       1517
Userenv       1524
.NET Runtime2.0  5000
vsJITDebugger   4096

※システム

System.Error    1003




・memory.dmp 解析 
 参考:http://type-y.com/2010/03/windows-driver-kit-wdk-memorydmp.html

WinDbgインストール。
Symbol File Pathを適当に設定後、!analyze -v実行。
あ、ちなみにファイルは233MB。

Probably caused by が、 memory_corruption ( nt!MiRestoreTransitionPte+173 )
データ死んでる?

MODULE_NAME:nt

なんだろう、ntって。
分からんので、lmvm ntを実施。



start    end        module name
80800000 80a7f000   nt         (export symbols)       ntkrnlmp.exe
    Loaded symbol image file: ntkrnlmp.exe
    Image path: ntkrnlmp.exe
    Image name: ntkrnlmp.exe
    Timestamp:        Wed Aug 13 19:50:45 2008 (48A2BC85)
    CheckSum:         0026CB9E
    ImageSize:        0027F000
    File version:     5.2.3790.4354
    Product version:  5.2.3790.4354
    File flags:       0 (Mask 3F)
    File OS:          40004 NT Win32
    File type:        1.0 App
    File date:        00000000.00000000
    Translations:     0411.04b0
    CompanyName:      Microsoft Corporation
    ProductName:      Microsoft(R) Windows(R) Operating System
    InternalName:     ntkrnlmp.exe
    OriginalFilename: ntkrnlmp.exe
    ProductVersion:   5.2.3790.4354
    FileVersion:      5.2.3790.4354 (srv03_sp2_gdr.080813-1204)
    FileDescription:  NT Kernel & System
    LegalCopyright:   (C) Microsoft Corporation. All rights reserved.


ntkrnlmp.exeってなんじゃいと調べたらメモリ関連のプロセスと。

メモリ腐ってんのかなぁ。
と、時間切れでここまで。あとは保守依頼。

2012年9月28日金曜日

Access勉強メモ 9/28

仕事がてら業務用アプリケーションをAccessでつくることになったのでメモ。


大まかな要件としては

・営業所員向けのシステム案件用見積書作成支援アプリケーション
・DBは各営業所で共有


ぐらい。
まぁこれからヒアリングかけて要件等定義。たぶん。

Access触ったことほとんどない(DBいじるぐらい)ので勉強から。



開発手法について知る必要があるのでチュートリアルも兼ねて軽いものを作ってみる
「Microsoft Access初心者入門講座」
http://ms-access.seesaa.net/category/677168-1.htmlを参考。

ステップ1「テーブルの作り方」
 特に無し、テーブル作成、主キー設定

ステップ2「テーブルへのデータ入力」
 これも特に無し、テーブルにデータ入れるだけ

ステップ3「レポートの作り方」
 レポートとは帳票、Accessはデータ表示の為にフォームかレポートを用いる必要がある
 チュートリアルとバージョン違う(使ってるのは2010)ので作成タブ→レポートウィザードを実行
 ウィザード通りに進める、特に引っかかるところはなし。

ステップ4「フォームの作り方」
 フォーム作成、コントロール配置。イベントプロシージャとかはまだつくらず。
 ここも特に問題なし。

ステップ5「プログラミング」
 ツールバーにコードがいので、作成タブ→VisualBasicを起動。Alt+F11でも可。
 標準モジュールを一つ挿入。
 →これ違う。ツールバーに「コード」ボタン追加してやってフォームをデザインビューに切り替えてやらないと、
  VisualBasic側でコントロールをソースで拾ってこれない。
  後は打ち込むだけ。
  ラベル使えるのね、知らなかった

ステップ6「プログラムの動作確認」
 動かすだけ。フォームの名前間違えて一個エラー。oops。

ステップ7「プログラム解説」
 大体OK。引数は多すぎて覚えられんので慣れるしかないわ

とりあえずここまで。

2012年7月9日月曜日

制作物。

今まで作ったものたち。
備忘録として書いてく。
なんか作ったら更新。

※Android

・バーチャファイター技表アプリケーション
→http://goo.gl/opCea

csvからデータを読んでDB化して、SQLでクエリ発行してデータ表示。
全キャラ分はとても大変だった・・・インストール数は延べ3000件。
初めて作って評価してもらって、とても嬉しかった。感慨深い。



が、韓国語のパクリアプリが出現。
→http://goo.gl/zR1oF
レイアウトが似てるというかCSVをハングル置換しただけじゃねーかぐらいの勢い。
ほんと嫌いあの国・・・



・バーチャファイター統合アプリケーション
→http://goo.gl/pJ0WJ

上記のアプリを全キャラ分統合して付加情報を加えたもの。
技術的にはフリック機能を追加したり。
200円で売り出して、60件程売れた。
とても嬉しい。


・バーチャファイター統合アプリケーション(English)
→http://goo.gl/awjt0

上記のアプリを英訳したもの。
技術的には特に変わらず。
こちらは250円で売り出して、売上20件程。



2012年6月6日水曜日

SQLからデータ読んだ際に改行文字が機能しない

うまくできないよー
えーんえぬ えーんえぬ  

なーんちゃって。


いや2日ぐらい詰まりました。
色々調べたところ、Javaの内部で使われている文字コードの問題と発覚。
参考:ttp://edywrite.blogspot.jp/2010/12/androidsqlite.html

内部の文字コード用のバイトデータを生成してあげて、それをUTF-8でマッチングさせるために
置換すればよいとのこと。
cursor使ってるんで


String = new String(("\n".getBytes("iso-8859-1")),"UTF-8")
cursor.getString(idx).replaceAll(String,"\n")

な感じ。
なるほどー。

2012年5月29日火曜日

開閉ListView

ListViewのオプションであんだろーと思いきや別ビューだった、残念

ということで使うのはExpandableListViewとやら。
親→子の概念を持ったリスト。
adapterセットに使う引数は驚きの9個!9個ですよ奥さん!

(ttp://dev.classmethod.jp/smartphone/basic-android-component-03-expandablelistview/)
を全面的に参考。

親と子の定義。



    ArrayList<HashMap<String, String>> parent
         = new ArrayList<HashMap<String,String>>();

    ArrayList<ArrayList<HashMap<String, String>>> child
         = new ArrayList<ArrayList<HashMap<String,String>>>();

親グループ定義。ここでは一個だけ。


    HashMap<String, String> group1 = new HashMap<String, String>();
    groupA.put("group", "成人病");


ぶち込み。

parent.add(group1)


子定義。


  ArrayList<HashMap<String, String>> childList = new ArrayList<HashMap<String,String>>();
    HashMap<String, String> child1 = new HashMap<String, String>();
    child1.put("group", "成人病");
    child1.put("name", "肝硬変");
    HashMap<String, String> child2 = new HashMap<String, String>();
    child2.put("group", "成人病");
    child2.put("name", "糖尿");


子と親の結びつけはキーで結ぶ。ここで言うgroup。
ぶち込み。

childList.add(child1)
childList.add(child2)

listをぶち込み。

childData.add(childList)


adapter。


       SimpleExpandableListAdapter Exadapter1 = new SimpleExpandableListAdapter(
               getApplicationContext(),
               groupData,
               android.R.layout.simple_expandable_list_item_1,
               new String[] {"group"},
               new int[] { android.R.id.text1 },
               childData,
               R.layout.onedata,
               new String[] {"name"},
               new int[] { R.id.rowtext1});

親と子で使うレイアウト変えてるけどまぁこんな感じ。
コンテキストのあとはデータ、レイアウト、キー値、レイアウトのリソースIDの順。
子要素の数だけhashmapをnewする必要があるのでDB絡める実装はちょい考え中。
うーん。



2012年5月23日水曜日

csvからDB作成

ポイントは2つ。

・csvファイル保管場所

project/res/rawに保管。
読まれたくない場合はassetsに突っ込むがその場合普通にパス指定しただけでは読めないので注意。


・リソースID指定

読む際はR内に定義される先頭ポインタ?じゃないかもしれないけどID値を取得。
resouceid = r.raw.resource;
InputStream is = resource.OpenRawResource(ResourceID);

こんなん。


DBに詰めるのはInsertHelperを使った。

参照:ttp://d.hatena.ne.jp/ipreachable/20110129/1296326520

一個困ってるのが、csv内にエスケープシーケンス(\n)を書くと(\N)になってしまう点。
うーむ。

2012年5月17日木曜日

ListViewの罫線を変える

divider="色コード"
dividerHeight="サイズ"

で変更可。
サイズはピクセル指定可。

2012年5月8日火曜日

軟弱なmax野郎どもが!!

imageviewにmax~が全く効かない。

android:maxWidth="fu*k"とか書いてたんですが、
どうやらandroid:adjustviewboundsとやらを設定してやれば行ける模様。
どれどれ・・・


あらーほんとだ行けた。
いやはや。

デフォルトでfalseになってるのがよくわからん。なんでだろう。
layout_weightとか使ったりしてたんですが、微調整効かないんでこっち使用。
静的な設定をとことん嫌がるってことなんでしょうか。

2012年5月6日日曜日

背景の透過

背景画像を指定

android:background="@drawable/oops.jpg"

で、「manifest」に移ってandroid:theme="@android:style/Theme.Translucent"を追加。


2012年4月29日日曜日

SDカードにコピー

AndroidアプリをSDカードにコピーするのは以下の設定。


1.AndroidManifestの、

・Install location→auto
・minSDKVersion→8以降(2.2以降の機能であるため)


2.マーケット側でコピー防止機能をオフ(これいらんかも)


2012年4月25日水曜日

listview色変え

苦戦した。

viewを新規作成する際は


tmp1 = text.getText().toString();
if(tmp1.equals("target")){
text.setTextColor(Color.CYAN);
data.get(position).setcfl(true);
VH.tv.setTextColor(Color.CYAN);
VH.cfl = true;
}else{
text.setTextColor(Color.RED);
data.get(position).setcfl(false);
VH.tv.setTextColor(Color.RED);
VH.cfl = false;
}

こんなんでいいんだけど、問題は再利用する際。
今回はviewholderを使用しているので、
view.getTagした後、data.get(position).gettextの値によって、
「holderのデータ(ここでは色情報)」を書き換えてやる必要がある。


やったー。

2012年4月23日月曜日

続き。

にっちもさっちもニッチ戦略もプッチモニも行かなくなったので、
とりあえず別解決手段を探した。

何の話かってーとListActivityにヘッダ付ける話。

解決してみると簡単な話でしたOTL


ListActivityも、通常Activityと同じようにまずsetContentView。
で、そのレイアウト内を、

Relative

Linear
ヘッダ
/Linear

Listview
/Listview

/Relative

と書いてあげればOK。
注意点はListActivity内のListIDを@id/android:list"とすること。
じゃないとRuntimeExeption食らう。
ListActivity側で、id.listを決めうちで呼んでるらしい。


あと覚えておくこととしては、Listactivity内のListは
this.getListViewで拾える。ListView周りをいじりたい時はこっちのがいいかも。

あー詰まった。
よしよし、でもすっきり。

2012年4月7日土曜日

バックキー長押しからのリストダイアログ表示からの酒飲みたい

既にオプションメニューに毛色の違うメニューを実装しているので、
違うインターフェースを模索してみた。

・画面長押しorダブルタップ
・ハードウェアキー長押し

あたりがぱっと浮かんだけど、リストビューを使ってるから前者難しそう。てことで後者。

オプションキーとホームキーは仕様上使えないぽい。
のでバックキーに割り当てよう。

まずバックキー長押し取得。
(参考:http://techbooster.jpn.org/andriod/device/4053/)
onKeyLongPressを実装する。
拾ったeventのキーコードを取得して定数と照らし合わせる。わぁ素敵。

public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        Toast.makeText(this, "バックキー長押し", Toast.LENGTH_SHORT ).show();
          return true;
    }

テストでトースト表示。
で、次。

イベントの目的はというと、画面レイアウトの変更をしたいので、リストダイアログを呼び出すことにする。


 AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("選択");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                }
            });
 AlertDialog alert = builder.create();
 alert.show();

こんな感じ。
itemsはstr[]。

長くなったんで次の記事へ。

2012年4月3日火曜日

androidアプリアップデート方法

こんなとこで詰まるのは自分くらいじゃないかと結構悲しくなったけどメモ。
デベロッパー画面内に明示的にアップデートボタンのようなものは無く、
manifest.xml内のVersionCode等、バージョンを表す数値を増やしたapkをアップすればよい。
証明書は同じもので。


いやーハマった。
ちなみに反映までは体感的に30分ほど。

1本出来るまで。

バーチャファイターという大分息の長いゲームをやってるんですが、
今回はゲーセンで見るための技表アプリを作りました。

アプリURL: http://t.co/JNynFpVh

 ひとまず形になるまでに超えた山を備忘録としてメモ。


1.リストビューのカスタマイズ

最初から実装されているリストビューではレイアウトが合わなかったのでひとまずこれをカスタマイズする手段を探した。

「リストビューをカスタマイズする」
http://techbooster.org/android/ui/1282/
を参考にカスタムビューを作成。


2.SQLとの連携

次に、ハードコーディング回避のためにDBとしてデータを持ちたかったのでSQL連携部分について実装。

「AndroidでSQLiteのDB操作をするための基礎知識」
http://www.atmarkit.co.jp/fsmart/articles/android06/android06_1.html
を参考にした。
ただ結局内部でexecqueryを行っているためにほぼハードコーディング状態w
何とかしたい・・・


とりあえず上記2つかな。


※未実装項目

・不利フレーム(数値)によって色分け
楽に出来るかと思いきやそうでもないことが判明。
色を変えたポジションの情報保持がうまくいかん。
四苦八苦中。

・ヘッダの固定
これも苦戦中。
xmlを連結させて動作させてるため、別レイアウトが必要なのかなーと思いつつ放置中。

・表示項目をユーザで任意設定
これはまだ取り掛かってないけどやってみたい。
インターフェースどうしよっかなぁ。

2012年4月1日日曜日

オプションメニュー表示

galaxy s使ってますが、ホームボタンの横の2つのボタン名称が分からず、イベント実装のための参考文献がなかなか探せなかったのでメモw

向かって左がメニューボタン、右がバックボタンっていうらしいよ・・・
勝手に便利ボタンと戻るボタンとか名づけてすいませんでした・・・

で、実装。
メニューつけたいActivity生成時に、

public boolean onCreateOptionsMenu(Menu menu) {
   boolean ret = super.onCreateOptionsMenu(menu);
   menu.add(0 , Menu.FIRST , Menu.NONE , “その1″);
   menu.add(0 , Menu.FIRST + 1 ,Menu.NONE , “その2″);
   return ret;
}


を実装する。
(参考:http://android.roof-balcony.com/activity/optionmenu/)
項目追加はmenu.addしてあげればよいだけ。シンプル。
引数はグループインデックス、アイテムインデックス、表示順序変更パラメータ、内容。
クリック時のイベントは、
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
で実装。
item.getitemidインターフェースでどれ選んだか判定。


2012年3月27日火曜日

view背景色変更

android:background"色コード16進数"

を追加。それだけ。

onCreateは(ある意味)勝手に呼ばれる

onCreate時にDBからデータを引っ張ってくるアクティビティの挙動がおかしかったのでメモ。
どうやら端末の向きが変わったりした時にも呼ばれるらしい。
AndroidManifest.xmlにandroid:screenOrientationと追加すると固定される模様。

参考:「Android : onCreate()」
http://elix-jp.sakura.ne.jp/wordpress/?p=125


【追記】
画面スクロール時にもSQLクエリ発行されてるっぽいので何だろうと調べてみた。
ていうかSQLどうこうの話じゃなかった。oops。

android内部でメモリ節約のためにデータを表示するviewを再利用してるとのこと。
よって、初めてview生成する時だけnewして、実体が既にあるviewが渡されたら情報を保存して、再利用に備えてやる必要がある。
nullが来たら同じデータ型を持つviewholderを実装してあげて、
    static class ViewHolder{
        TextView tv1;
        TextView tv2;
        TextView tv3;
    }

タグ情報付加。
convertView.setTag(VH);

実体あったら
VH = (ViewHolder)convertView.getTag();


ハマった。