0

ListView にスイッチ (Android 4.0+) を追加する必要があります。ImageView Button を備えた単一のスイッチだけです。リスト アクティビティに複数のビューを追加することを教える多くのチュートリアルを見てきましたが、必要なのは次の 1 つのオプションだけです。このスイッチを持つリスト。ボタンまたは textView を配置できるかどうかはわかっていますが、そこにスイッチを配置できますが、すべてのオプションで同じシナリオ全体を繰り返さない限り、ボタンまたはビューをそこに配置する方法を理解できません。 ArrayAdapters と ListViews は初めてですが、後で使用できるように、これら 2 つを学ぶ必要があります。たとえば、次のようなものが必要です。

______________________
Image  |  Switch 
______________________
Normal option
______________________
Button | Whatever view
_______________________
Normal option
_______________________
Checkable Option
_______________________

などなど...だから、あなたがはっきり言って、そこにあるすべてのオプションを完全に制御したいのです。それが私が必要とし、望んでいることです。助けてくれてありがとう:)

4

1 に答える 1

2

getViewリストビューで実行する場合は、アダプターのメソッドの各位置を明示することで実行できます。次に例を示します。

public View getView(int position, View convertView, ViewGroup parent) {
        switch (position) {
        case 0:         
            // do image switch option
            // convertView = layout 0
            break;
        case 3:
            // do button whatever option
            // convertView = layout 3
            break;
        case 5:
            // do button whatever option
            // convertView = layout 5
            break;
        default:
            // do normal option
            // convertView = layout 1
            break;
        }
        return convertView;
    }

getViewビューを返す多くのAndroidアダプターのメソッドです。に接続するとlistView、各行のビューを返すメソッドとして認識されます。表示されるリストビューの各行は、このメソッドの1つの実行されたインスタンスの積です。これは呼び出さないでください。リストビューの行を表示する必要があるとき、行の位置が画面外に移動して戻ってくるとき、またはlistViewが更新されるとき、通常はリストビューの行を「作成」する必要があるときはいつでも自動的に呼び出されます。 "。必要な特定の外観に合わせてカスタマイズできるように、オーバーライドすることができます。

convertViewビューでもあります。これは、 view-recyclingと呼ばれるlistviewアダプターで実行される同時メカニズムの製品です。ゲームのショッピングメニューに1000行を表示する必要があるリストビューがあるとします。getView従来のアプローチでは、活気のあるxmlを作成するためにinflateコマンドを作成し、コンポーネントを編集してアイテムの違いを表示するだけです。つまり、これは1000回の膨張であり(膨張はコストのかかる手順です)、それに加えて、メモリ内にある必要があり、ガベージコレクターを詰まらせているだけです。さらに、変更を表示するために何かを更新する必要がある場合はどうなりますか?出て行け!現在、クアッドコア電話がありますが、もっと良い方法があります。

正しく実行されたリストビューは、実際には一度に1000ビューを作成するのではなく、一度に画面に表示されるのは7または8ビューのみです。リストビューの行ビューが電話の画面の境界を超えてスクロールされた場合、それはまだ破棄されていません。この同時メカニズムが実行され、このビューはのタイトルで保存および保持され、次の呼び出しconvertViewのパラメーターとして渡されます。getView本質的に次のgetView呼び出しの次の行のように見えるビューがあり、おそらくテキストビューのテキストのみが変更されているなどの理由で、これを(再)使用しないことはひどい無駄ですが、とにかく別の高価なインフレを行います。次に、未使用のconvertViewは、GCへの2回目のチャンスが無視されたことを認識し、通常どおりに機能します。

上記のコードはconvertView、率直に言って質問されていないため、を使用していませんが、使用するのは非常に簡単です。

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        // inflation step
        // convertView = inflation
    }

    // rest of code involving components of inflated view
    return convertView;
}

最初に、そこに何もないかどうかを確認します。これは、リストビューが最初に起動されたときであり、デッキに捨てられる機会がなかったときです。そして、その時だけあなたのインフレをしなさい。次回、getViewは使用済みのビューで口いっぱいになり、プラグインします(返された場合)。これは、リストビューのパフォーマンスにとって最も有益なアクションであり、すぐに実行できます。

しかし、あなたはこれを知っている必要があります、このサイトでandroidとタグ付けされた質問の約半分はこれだけにあります、あなたが上にスクロールしている場合は真下、スクロールしている場合は真上にあるように、convertViewがあなたが望む位置に落ちるという保証はありません下。何がどの位置にあるかを明確にしていることを確認してください。そうすれば大丈夫です。これと他のリストビューのノウハウの詳細については、これを見てください:http ://www.youtube.com/watch?v=wDBM6wVEO70 。

于 2012-12-06T23:27:55.223 に答える