2013-03-04 1 views
0

현재 클래스를 다른 클래스로 리디렉션 한 후 메시지를 표시하려고합니다.이 코드 은 다른 클래스로 리디렉션하지 않고 메시지 만 표시합니다. 또한 별도의 Handler 클래스를 시도했지만, 하지만 일하지 않아. pls은 prbm을 해결하는 데 도움이됩니다.스레드 내 Intent 클래스를 호출 할 수 없습니다.

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(); 

        } 
       }); 

     } 
     }); 
+2

이 유'의도 myIntent = 새로운 의도 (Your_Current_Activity.this, List.class을) 시도가 다른 클래스 호출이 사용 핸들러를 할 수 없다 –

+0

@ ρяσѕρєя K Ya ... Tnx 작품 ... –

+0

이 작품 (잠시 동안), 여전히 좋은 생각이 아니에요. –

답변

2

규칙 : 스레드에서 UI 물건을하지 마십시오.

해결 방법 : 안드로이드에서 AsyncTask를 사용하면 전경에 진행 상황을 표시하면서 백그라운드에서 무거운 것을 계속 사용할 수 있습니다. 백그라운드 스레드의 실행이 끝나면 UI 작업을 수행하십시오.

AsynTask의 사용에 대한 자세한 내용을 알고이 읽기 : http://developer.android.com/reference/android/os/AsyncTask.html

+0

그러면 어떻게 호출 할 수 있습니까? –

+0

@Shail 그것은 대답이 아닙니다. 그것은 팁입니다. 그것을 완성 시키려고 노력하십시오. 당신의 ** 규칙 ** –

+0

but.setOnClickListener (새 View.OnClickListener() { 공공 무효의 onclick (최종보기 V) = 새로운 의도 { 의도 myIntent (v.getContext (그에게 링크 나에 대한 몇 가지 설명을 제공), List.class); startActivity (myIntent); Toast.makeText (getApplicationContext(), "메인 메뉴로 리다이렉트", Toast.LENGTH_SHORT).보여 주다(); } } –

0

처럼 의도에 클래스 컨텍스트를 사용

Intent myIntent = new Intent(yourActivity.this, List.class); 
1

당신이 정말로 활동이 시작된 후 메시지를 표시해야하는 경우, 설정 첫 번째 액티비티의 플래그를 설정하고 다음 토큰을 사용하여 해당 토스트를 시작합니다 (플래그가 있다고 가정).

토스트 아이디어를 포기하고 NotificationManager를 통해 메시지를 보낸 다음 일시적으로 머 무르려면 자동으로 빠르게 삭제할 수도 있습니다. 호출중인 활동이 자신이 아닌 경우 NotificationManager를 사용하는 것이 이상적인 솔루션입니다.

어떤 경우에도 여전히 스레드를 사용해야하는 경우 AsyncTask을 사용하십시오. 배경 스레드에서 축배를 보여주는 것과 같은 실수를하지 마십시오. 그래도 선상에서 약간의 문제가 생길 수 있습니다 (비록 컨텍스트에서 어쨌든 컨텍스트를 얻는다고해도).

사용 : 대신

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

:

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

대신 onPostExcute 내에서, 당신의 작업을 수행 할 스레드를 사용 AsynTask를 사용하는()

0

showToast() 방법을 변경합니다. `) (대신 v.getContext`의`;

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 
      }; 
       }; 
+0

응용 프로그램의 컨텍스트 사용 – Prachi

관련 문제