7

就像我的標題所說,我在Android projectActionBarActivity類中尋找相當於getActivity()安卓等效於ActionActionActivity中的getActivity()

我想傳遞一個Activity參數AsyncTask申報的對象,因爲我在我的自定義AsyncTask擴展類

這裏使用Activity對象我的項目

public class EventCreator extends ActionBarActivity { 

private Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_even_creator); 
    View v = getLayoutInflater().inflate(R.layout.activity_even_creator,null); 
    this.context = this.getBaseContext(); 

    final Button createButton = (Button)findViewById(R.id.createEventButton); 
    createButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AsyncTask<Void,Void,Boolean> eventCreatorSend = new SendEvents(/* here need activity object */); 
      eventCreatorSend.execute(); 
     } 
    }); 

} 

    class SendEvents extends AsyncTask<Void,Void,Boolean> { 

     public Activity act; 

     SendEvents(Activity a) { 
      this.act = a; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      ((LinearLayout)act.findViewById(R.id.layout_loader_create_event)).setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 

      SystemClock.sleep(5000); 
      return true; 
     } 

     @Override 
     protected void onPostExecute(Boolean params) { 
      if (params){ 

       ((LinearLayout)act.findViewById(R.id.layout_loader_create_event)).setVisibility(View.GONE); 
       act.finish(); 
      } 
      else { 
       ((LinearLayout)act.findViewById(R.id.layout_loader_create_event)).setVisibility(View.VISIBLE); 
       Toast.makeText(act,"Fail to send event",Toast.LENGTH_SHORT).show(); 
      } 
     } 


    }; 
} 

的例子最簡單的代碼在有一次,我想從ActionBarActivity類使用getParent(),但它返回一個空對象。 那麼如何獲得我想要的ActionBarActivity類中的Activity對象?

+0

確定,其中究竟是你想在你的代碼中使用呢? –

回答

11

嘗試nameofactivity.this代替getActivity()

我總是在任何其他種類的Activity使用getActivity()Fragments活動和。這。

+0

arf是的,我發現它,謝謝老兄:) – MrLeblond

4

哦該死! 剛發佈我的問題後,我剛剛找到解決方案。

我用 MyClass.this,就這樣做了。像這樣:

AsyncTask<Void,Void,Boolean> eventCreatorSend = new SendEvents(EventCreator.this); 
    eventCreatorSend.execute(); 

希望這可以幫助別人!

0

最簡單的方法是可變的活動

// in your fragment 
Activity myActivity; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    //fragment shouts "i know my father!!!" 
    myActivity = activity; // 
} 

現在你的活動實例(父親)可以在任何地方代表