9

レイアウトが作成されたらすぐにボタンが自動的にクリックされるようにしたいので、それを使用button.performClick()します。

問題はそれが機能しないことです。onCreate, onStart, onResumeメソッド中にはそれができないようです。ボタンとそのイベントはどの時点で作成されるので、クリックを実行できますか?

これ

@Override
protected void onResume() {
    super.onResume();
    mybutton.performClick();
}

動作しません。

4

4 に答える 4

34

これは、同様のケースで私にとってはうまくいきました:

mybutton.post(new Runnable(){
            @Override
            public void run() {
                 mybutton.performClick();
            }
});

このようにして、ランナブルは、ボタンが既にレイアウトにロードされている場合にのみ実行されます。

于 2013-03-05T13:34:26.927 に答える
3

私がにおいがするのは、ビューにonClicklistnerを追加するのを忘れているようです。私はあなたのやり方をテストしました。

ボタンをグローバルに定義するButton btn;

内部onCreate()

btn=(Button)findViewById(R.id.button);
            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    dialog();
                }
            });

そしてその中でonResume()

@Override
    protected void onResume() {

        btn.performClick();
        super.onResume();
    }

ダイアログの表示に成功しました!

于 2013-03-05T13:43:42.613 に答える
3

ViewTreeObserverを使用する必要があります。

    ViewTreeObserver vto = mybutton.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            vto.removeOnGlobalLayoutListener(this);
            mybutton.performClick();
        }
    });
于 2013-03-05T13:33:45.510 に答える
0
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    myButton = (Button) findViewById(R.id.myButton);
    myButton.setOnClickListener(this);
}


@Override
public void onStart() {
    myButton.performClick();
}

@Override
public void onClick(View v) {
    // DO STUFF
}
于 2013-03-05T13:39:35.470 に答える