0

我想在将当前类重定向到另一个类后显示消息。但是这段代码只显示消息,而不是重定向到另一个类。我也尝试了单独的 Handler 类,但没有工作。请帮助解决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

如果您确实需要在 Activity 启动后显示一条消息,请从第一个 Activity 设置一个标志,然后使用您开始启动相关 toast 的下一个 Activity(假设该标志在那里)。

您也可以放弃 toast 的想法,只需通过 NotificationManager 发送该消息,然后如果您希望它暂时停留在那里,则自动快速删除它。如果您调用的 Activity 不是您自己的,则使用 NotificationManager 是理想的解决方案。

无论如何,如果您仍然需要使用线程,请使用AsyncTask。只是不要犯从后台线程显示吐司的同样错误。这仍然会给您带来一些麻烦(即使您设法以某种方式获得上下文)。

于 2013-03-04T05:32:38.373 回答
0

在意图中使用您的类上下文,例如:

Intent myIntent = new Intent(yourActivity.this, List.class);
于 2013-03-04T05:31:10.137 回答
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); 

而不是使用线程使用AsynTask在 onPostExcute() 中执行您的操作。

于 2013-03-04T05:34:37.697 回答
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 回答