2

高解像度のドローアブル (テスト用) とボタンを各アクティビティの同じ場所に配置した 4 つのアクティビティがあります。ボタンをクリックすると、次のアクティビティに移動します (Activity1 --click--> Activity2 --click--> Activity3 --click--> Activity4)。高解像度の写真のため、1 つのアクティビティを読み込むのに約 0.5 秒かかります。

問題。ユーザーがActivity1のボタンを3回クリックすると(消える前に)、Activity4が開きます。

クリックが何らかの形でキャッシュされているようです。それを防ぐ方法(特にクリックを別のアクティビティに渡す)?

4

3 に答える 3

1

ボタンをクリックすると無効になりonResume()、各アクティビティで有効にできます。

于 2013-03-18T19:42:24.973 に答える
0

現在のアクティビティのボタンの画像が読み込まれるまで作業を停止しようとしているonClick()のか、他のアクティビティの画像が読み込まれてからユーザーに切り替えさせるのか(つまり、アクティビティ4で、背景のないボタンがユーザーに表示されないようにします。)これが両方に対する私の提案です。

それが最初の問題である場合は、アクティビティにブールフラグを追加してみませんか?たとえば、onClickyourbuttonがメソッドnextActivityをトリガーするとします。アクティビティの開始時にはfalseであるが、終了時にはtrueに設定される変数buttonReadyを作成しますonCreate()。おそらく、そのモンスター画像の処理が完了したときです。次に、トリガーするメソッドに条件を追加するだけです

public void nextActivity(View v){
    if(buttonReady){
        //start your next activity
    } else {
        Log.d("Button click", "Still loading. . .);
    }
}

このようにして、ボタンをクリックする機能を無効にするのではなく、効果だけを無効にします。画像が読み込まれるまでボタンを使用したくないという問題がある場合は、同様のアプローチに従います。ビットマップの処理が完了するまでボタンを使用findViewByIdして非表示に設定し、ボタンを表示します。

onClick他のアクティビティの画像が読み込まれるまでボタンを遅らせたいという問題がある場合、それはより困難です。私の問題は、少なくとも最初の起動時に、画像がロードされないことです-それらを使用しているアクティビティ内でビットマップを処理していると仮定します。この状況では、2つの考えられる提案があります。

(1)上記のように画像が処理されるまでボタンを非表示に設定し、画像が読み込まれたときにボタンを元に戻します。たとえば、非表示にするには:

View button = findViewById(R.id.button);
button.setVisibility(View.GONE);(

(2)画像キャッシュを作成し、最初のアクティビティ中にそこに画像をロードし、キャッシュにデータが入力された後、他のアクティビティからそれらにアクセスします。ビットマップのキャッシュについて詳しくは、こちらをご覧ください。

この提案を機能させるには、Androidドキュメントで説明されている方法を少し変更する必要があります。1つのアクティビティにキャッシュを含めるのではなく、単一パターンのようなものを使用して、アプリ全体でアクセスできるキャッシュを開始します。そうすれば、バイマップを1回だけロードする必要があります。

于 2013-03-18T20:03:31.200 に答える
0

画像の読み込み中に、progressdialogでAsyncTaskを使用できます。ロードが完了したら、次のボタンを有効/クリック可能に設定できます。したがって、最初に画像が読み込まれ、その後、次のアクティビティに進むことができるようにします。

于 2013-03-18T20:05:13.753 に答える