0

現在のクラスを別のクラスにリダイレクトした後にメッセージを表示したいのですが、このコードはメッセージを表示するだけで、別のクラスにリダイレクトしません。別の Handler クラスも試しましたが、機能しません。pls は prbm を解決するのに役立ちます。

 but.setOnClickListener(new View.OnClickListener() 
        {
        public void onClick(final View v) 
          {

             new Thread(new Runnable() 
            {
                    public void run() 
                    {
                        try
                        {
                       /*  sample code */
                         showToast();

                        }
                     catch (IOException e) 
                        {

                        }           

                    }

            }


                     ).start();



    }

        public void showToast() {
            hd.post(new Runnable() {
                  public void run() {
                      Intent myIntent = new Intent(v.getContext(), List.class);
                      startActivity(myIntent); 
                      Toast.makeText(getApplicationContext(),"Redirect to main menu", Toast.LENGTH_SHORT).show();

                  }
               });

        }
        });
4

5 に答える 5

2

ルール :スレッドで UI を試さないでください。

回避策: Android で AsyncTask を使用して、フォアグラウンドで進行状況ダイアログを表示しながらバックグラウンドで重い処理を実行できます。バックグラウンド スレッドの実行の最後に、UI 作業を行います。

AsynTask の使用方法の詳細については、これをお読みください: http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-03-04T05:27:11.707 に答える
1

アクティビティの開始後に本当にメッセージを表示する必要がある場合は、最初のアクティビティからフラグを設定し、開始する次のアクティビティを使用して問題のトーストを起動します (フラグがあると仮定します)。

また、トーストのアイデアを放棄して、そのメッセージを NotificationManager 経由で送信するだけで、一時的にそこにとどめておきたい場合は、すぐに自動的に削除することもできます。呼び出しているアクティビティが自分のものでない場合は、NotificationManager を使用するのが理想的なソリューションです。

いずれにせよ、それでもスレッドを使用する必要がある場合は、AsyncTaskを使用してください。バックグラウンド スレッドからトーストを表示するという同じ間違いをしないでください。それでも、後で問題が発生する可能性があります (何らかの方法でコンテキストを取得できたとしても)。

于 2013-03-04T05:32:38.373 に答える
0

showToast()メソッドを変更します。

使用する:

Intent myIntent = new Intent(name_of_your_current_activity.this,
 List.class); startActivity(myIntent);

その代わり:

Intent myIntent = new Intent(v.getContext(), List.class);
 startActivity(myIntent); 

Thread を使用する代わりに、AsynTaskを使用して onPostExcute() 内でアクションを実行します。

于 2013-03-04T05:34:37.697 に答える
0

次のように意図的にクラス コンテキストを使用します。

Intent myIntent = new Intent(yourActivity.this, List.class);
于 2013-03-04T05:31:10.137 に答える
0

これを行うことはできませんハンドラーを使用して他のクラスを呼び出します

       Message msg = new Message();
    msg.what = 0;
    handle.sendMessage(msg);


Handler handle = new Handler(){

    @Override
    public void handleMessage(Message msg) {

        super.handleMessage(msg);

        if(msg.what == 0){
                  //call intent
            };
                };
于 2013-03-04T05:35:11.587 に答える