Android ListViewデフォルトでは、実装コードを選択します。


ここはTOCを使って作成したディレクトリです。
•Layoutファイル定義
◦ListView定義
◦itemテンプレート定義 
•コード
◦初期化リスト
◦ユーザクリック処理 
•効果 
--------------------------------------------------
ListViewを使ってチャージ方式の選択を実現するために、デフォルトでは第二項を選択したいです。午後になってやっとできました。元々はJavaでAndroidアプリを書いたことがないですが、久しぶりに書いています。すべてが疎遠になりました。半人前で大きなボケになりました。
Layoutファイル定義
二つの部分に分けて、一部はListViewの定義で、一部はitemテンプレート、つまりrowの定義です。
ListView定義
簡単です。次はLayoutファイルのListView定義です。

  <ListView
    android:id="@+id/recharge_method_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="6dp"
    android:dividerHeight="2dp"
    android:divider="@color/ssq_bkgnd"
    android:background="@android:color/white"
    android:choiceMode="singleChoice"
    android:listSelector="@null"
    >
  </ListView>
まあ、CSDNのMarkdownエディタは元のデフォルトエディタよりずっと使いやすくなりました。コードを挿入するのはもっと簡単です。CSDNを使うのは初めてのMarkdownです。いいですね。
アイテムテンプレートの定義
itemテンプレートは以下のように定義されています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="60dp"
  android:gravity="center_vertical"
  android:background="@drawable/option_selector"
  >
  <ImageView
    android:id="@+id/recharge_method_icon"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="4dp"
    />
  <LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical"
    >
    <TextView
      android:id="@+id/recharge_method_name"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="15sp"
      />
    <TextView
      android:id="@+id/recharge_method_clue"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="12sp"
      />
  </LinearLayout>
  <ImageView
    android:id="@+id/recharge_method_checked"
    android:layout_width="34dp"
    android:layout_height="28dp"
    android:layout_marginRight="16dp"
    android:src="@drawable/option_checked"
    android:visibility="invisible"
    />
</LinearLayout>
私はListViewのitemに選択アイコンを表示するために、itemテンプレートファイルを定義する時に直接ImageViewを追加しました。表示と非表示を制御することで選択したように見えます。怠け者を盗んで、これは比較的に簡単な実現で、ListViewの中でitemの数量が多くない時メモリ、性能などに対して影響は大きくありません。
コード
コードは簡単です。二つの部分に分けて見てください。一部は初期化リストで、一部はユーザーがリストの中のある項目をクリックして選択マークを切り替えます。
初期化リスト
init Recharget List()メソッドはチャージ方式のリストを初期化するために使用されます。コードは以下の通りです。

  private void initRechargeList(){
    actionTexts = new String[]{
        getString(R.string.recharge_unionpay), getString(R.string.recharge_alipay), getString(R.string.recharge_bestpay)
    };
    actionClue = new String[]{
        getString(R.string.recharge_unionpay_clue), getString(R.string.recharge_alipay_clue), getString(R.string.recharge_bestpay_clue)
    };
    actionImages = new int[]{
        R.drawable.unionpay,
        R.drawable.recharge_icon_alipay,
        R.drawable.recharge_icon_bestpay
    };
    actionList = (ListView)findViewById(R.id.recharge_method_list);
    actionItems = new ArrayList<HashMap<String, Object>>();
    actionAdapter = new SimpleAdapter(this, actionItems, R.layout.recharge_method_list_item,
        new String[]{"action_icon", "action_name", "action_clue"},
        new int[]{R.id.recharge_method_icon, R.id.recharge_method_name, R.id.recharge_method_clue});

    for(int i = 0; i < actionImages.length; ++i) {
      HashMap<String, Object> item = new HashMap<String, Object>();
      item.put("action_icon", actionImages[i]);
      item.put("action_name", actionTexts[i]);
      item.put("action_clue", actionClue[i]);
      actionItems.add(item);
    }
    actionList.setAdapter(actionAdapter);
    actionList.setOnItemClickListener(itemListener);
    actionList.post(new Runnable() {
      @Override
      public void run() {
        lastCheckedOption = actionList.getChildAt(1).findViewById(R.id.recharge_method_checked);
        lastCheckedOption.setVisibility(View.VISIBLE);
        actionList.setItemChecked(1, true);
      }
    });
  }

上のコードは初期化チャージ方式のリストです。ListViewの使い方も簡単です。View TemplateCDacadapter、四つの要素です。
どのようにデフォルトでどのように選択しますか?
実は私のリストの中には三つしかありません。どちらが見えますか?
最初に私はListViewのsetAdapter方法を呼び出した後、直接get ChildAt(1)を使って第二項対応のViewを取得しました。そうです。崩れました。空の針よ、C++を使う時の昔の恋人をJavaに変えてAndroidを書きました。彼女はまた私とデートに来ました。
長い間、私はやっと分かりました。setAdapter()は非同期です。この方法を呼び出しました。ListViewのitemはすぐに作成されたのではなく、次のメッセージ処理時に作成されました。これを理解すると、前のコードの中の解決方法があります。post()を使ってRunnableオブジェクトを提出し、Runnable()内部でデフォルト選択という初期化動作を行います。
あなたが見ているように、私はnew Runnableからpost()に方法をあげました。run()の中で第2項を見つけました。選択アイコンを表示しました。そして、2番目の対応するViewをlastCheckedOptionメンバー変数に保存します。後はlastCheckedOptionという変数を通して、Onitem ClickListenerと結合してListViewの三つのitemの相互反発選択効果を実現します。
Markdownはどのように段落の前に字下げをしますか?迷っています。4つのスペースがこの段落に背景色を付けてくれます。いいですね。
 ユーザクリック処理
クリック処理はAdapterView.OnItem ClikedListenerインターフェースで行われます。コードは以下の通りです

  private AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      if(lastCheckedOption != null){
        lastCheckedOption.setVisibility(View.INVISIBLE);
      }
      lastCheckedOption = view.findViewById(R.id.recharge_method_checked);
      lastCheckedOption.setVisibility(View.VISIBLE);
    }
  };

あなたが見ているように、前回選択したアイテムの中で選択した効果を示すアイコンをlastCheckedOption変数で保存しました。ユーザーがクリックした時に、先に前のアイテムの選択アイコンを隠してから、現在の表示をします。
すべてはこんなに簡単で、解決しました。
効果
最終的な効果はソース紫です。

えっと、写真を挿入するのは元のMarkdownエディタよりずっといいです。
--------------------------------------------------
はい、思いがけずAndroidアプリを書きに来ました。とてもHighな感じです。
--------------------------------------------------
Markdownのエディターが書いたブログを知らないですが、腫れはどうですか?カタログを作成しました。直接TOCでOKです。やはり便利です。書き終わったら、やはり段落の行頭が分かりませんでした。どうすればいいですか?
オフライン編集もサポートしているそうです。いいですね。
もう一つは、左右の欄で、効果が見られます。ギthubのwikiページ編集よりは強いです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。