2014-04-09 12 views
6

Ich bin neu in Android-Entwicklung, und ich möchte eine Schaltfläche mit der Animation verknüpfen. Ich bekomme einen Fehler in der Nähe von runOnUiThread() und getApplication(). Wenn ich das als eine Aktivität hinzufüge, ist es in Ordnung, aber wenn es in MainFragment deklariert wird, gibt es einen Fehler. Wenn ich jedoch die Fehler behebe, erstellt es eine Methode und gibt false zurück.Android: Fehler in der Nähe von runOnUiThread bekommen, wenn ich es in der Nähe von Fragment

public class MainFragment extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.activity_main, container, false); 
    ImageButton btnFacebook = (ImageButton)rootView.findViewById(R.id.facebook2); 
    final Animation alpha = AnimationUtils.loadAnimation(getActivity(), R.anim.anim_alpha); 

    btnFacebook.setOnClickListener(new Button.OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      arg0.startAnimation(alpha); 

      Thread thread = new Thread() 
      { 
       @Override    
       public void run() 
       { 
        try 
        { 
         Thread.sleep(1000); 
        }catch(InterruptedException e){       
        } 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          startActivity(new Intent(getApplication(),FacebookActivity.class)); 
         } 

        }); 
       } 
      }; 


      thread.start(); 
      }}); 
    return rootView; 
}} 

In der XML-Datei habe ich nur den Facebook imagebutton. Wenn ich, dass klicken, hat es die Animation und dann Onclick-Ereignis auslösen muss passieren, aber ich weiß nicht, warum dieser Fehler nach oben knallen:

Verfahren runOnUiThread (new Runnable() {}) ist undefined für den Typ neuen Thread() {}

Und in der Nähe von GetApplication() -Methode Verfahren GetApplication() ist nicht definiert für den Typ neuen Runnable() {}

Wenn ich erstellen Bei den beiden Methoden geht der Fehler Es weg, aber dann, wenn ich auf den Knopf klicke, geht es nicht zur facebookActivity.java Datei.

Kann jemand sagen/helfen, was ich hinzufügen soll, um dieses Problem zu lösen. Vielen Dank.

+1

einen Blick auf die Antwort auf diese nehmen: [RunOnUIThread in Fragment] [1] [1]: http: // Stackoverflow.com/questions/16425146/runonuithread-in-fragment – andMarkus

Antwort

8

runOnUIThread(...) ist eine Methode von Activity.

Daher verwenden diese:

getActivity().runOnUIThread(...); 

Aber Vorsicht. Sie haben mit asynchronen Threads zu tun, so dass Ihr Fragment von seinem Activity gelöst werden kann, was zu getActivity() führt, das null zurückgibt. Möglicherweise möchten Sie vor der Ausführung eine Überprüfung if(isAdded()) oder if(getActivity() != null) hinzufügen.

Alternativ verwenden Sie eine AsyncTask, die dies auf dem ui-Thread selbst abläuft.

+0

ki wird verwenden und lassen Sie wissen, mein Freund @Niek Haarman –

+0

Ki wird es verwenden @Niek Haarman –

+0

ist es notwendig zu überprüfen GetActivity und AsyncTask können Sie wenig über diese pls erklären @Niek Haarman Ich frage eingehend, weil ich den obigen Code geändert habe, was du gesagt hast, jetzt funktioniert es gut, wird es zu einem Problem in der Zukunft führen –

2
runOnUiThread(new Runnable(){}) is method in Activity not in the Fragment. 

so müssen Sie

runOnUiThread(new Runnable(){}) 

in

getActivity().runOnUiThread(new Runnable(){}) 

Für Ihre requrement ändern ist es besser, Handler zu verwenden, anstatt Thread gewartet 1000 Milli Sekunden ..

+0

ki wird überprüfen und lassen Sie wissen, ob es funktioniert @kalyan pvs –

+0

es arbeitete für mich danke viel @kalyan pvs –

+1

@SandeepV froh, es hilft Ihnen .. –

2

Bitte verwenden Sie getActivity() anstelle von getApplication().

, die die mit einem Fragment verbundene Aktivität zurückgibt. Die Aktivität ist ein Kontext.

+0

ya das funktionierte für mich @Lavekush Agrawal –

+1

So können Sie bitte meine Antwort akzeptieren. –

+0

ya sicher, aber ich habe nicht überprüft, ob es funktioniert oder nicht @ Lavekush Agrawal –

Verwandte Themen