Android 相当于 getActivity() from/in ActionBarActivity
Android equivalent of getActivity() from/in ActionBarActivity
正如我的标题所说,我正在寻找 ActionBarActivity
class Android project
.
中的 getActivity()
的等价物
我想在 AsyncTask
声明 object 中传递一个 Activity
参数,因为我在自定义 [=] 中使用 Activity
object 17=] 扩展 class
这是我项目的最简单代码示例
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
class 中的 getParent()
,但它 return 是空值 object。
那么如何在ActionBarActivity
class中得到我想要的Activityobject?
尝试 nameofactivity.this 而不是 getActivity()
我总是在 Fragments
活动中使用 getActivity()
,在任何其他类型的 Activity
中使用 .this。
该死!
我刚刚在发布我的问题后找到了解决方案。
我用MyClass.this,搞定了。像这样:
AsyncTask<Void,Void,Boolean> eventCreatorSend = new SendEvents(EventCreator.this);
eventCreatorSend.execute();
希望能帮到别人!
最简单的方法是 Activity 变量
// in your fragment
Activity myActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//fragment shouts "i know my father!!!"
myActivity = activity; //
}
现在您的 activity 实例(父亲)可以在任何地方表示
正如我的标题所说,我正在寻找 ActionBarActivity
class Android project
.
getActivity()
的等价物
我想在 AsyncTask
声明 object 中传递一个 Activity
参数,因为我在自定义 [=] 中使用 Activity
object 17=] 扩展 class
这是我项目的最简单代码示例
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
class 中的 getParent()
,但它 return 是空值 object。
那么如何在ActionBarActivity
class中得到我想要的Activityobject?
尝试 nameofactivity.this 而不是 getActivity()
我总是在 Fragments
活动中使用 getActivity()
,在任何其他类型的 Activity
中使用 .this。
该死! 我刚刚在发布我的问题后找到了解决方案。
我用MyClass.this,搞定了。像这样:
AsyncTask<Void,Void,Boolean> eventCreatorSend = new SendEvents(EventCreator.this);
eventCreatorSend.execute();
希望能帮到别人!
最简单的方法是 Activity 变量
// in your fragment
Activity myActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//fragment shouts "i know my father!!!"
myActivity = activity; //
}
现在您的 activity 实例(父亲)可以在任何地方表示