这把我难倒了。
我需要在自定义布局类中调用activity方法。这样做的问题是我不知道如何从布局中访问活动。
ProfileView
public class ProfileView extends LinearLayout
{
TextView profileTitleTextView;
ImageView profileScreenImageButton;
boolean isEmpty;
ProfileData data;
String name;
public ProfileView(Context context, AttributeSet attrs, String name, final ProfileData profileData)
{
super(context, attrs);
......
......
}
//Heres where things get complicated
public void onClick(View v)
{
//Need to get the parent activity and call its method.
ProfileActivity x = (ProfileActivity) context;
x.activityMethod();
}
}
ProfileActivity
public class ProfileActivityActivity extends Activity
{
//In here I am creating multiple ProfileViews and adding them to the activity dynamically.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.profile_activity_main);
}
public void addProfilesToThisView()
{
ProfileData tempPd = new tempPd(.....)
Context actvitiyContext = this.getApplicationContext();
//Profile view needs context, null, name and a profileData
ProfileView pv = new ProfileView(actvitiyContext, null, temp, tempPd);
profileLayout.addView(pv);
}
}
正如您在上面看到的,我正在以编程方式实例化profileView并将activityContext与它一起传递。2个问题:
我是否将正确的上下文传递到Profileview?
发布于 2012-03-27 22:21:41
在Activity
中,只需将this
作为布局的Context
传入即可:
ProfileView pv = new ProfileView(this, null, temp, tempPd);
之后,您将在布局中拥有一个Context
,但您将知道它实际上是您的Activity
,您可以对其进行强制转换,以便获得所需的内容:
Activity activity = (Activity) context;
发布于 2017-09-14 03:58:14
当在片断或自定义视图中的UI中操作时,我已经成功地使用它将Context
转换为Activity
。它将递归解压缩ContextWrapper,如果失败则返回null。
public Activity getActivity(Context context)
{
if (context == null)
{
return null;
}
else if (context instanceof ContextWrapper)
{
if (context instanceof Activity)
{
return (Activity) context;
}
else
{
return getActivity(((ContextWrapper) context).getBaseContext());
}
}
return null;
}
发布于 2012-03-27 22:24:01
执行操作
在Android中有两个不同的上下文。一个用于您的应用程序(让我们称其为大的),另一个用于每个视图(我们称其为活动上下文)。
linearLayout是一个视图,因此您必须调用活动上下文。要从活动中调用它,只需调用"this“即可。很简单,不是吗?
当您使用
this.getApplicationContext();
你调用大的上下文,一个描述你的应用程序的上下文,不能管理你的视图。
Android的一个大问题是,上下文不能调用你的活动。当有人开始开发Android时,避免这种情况是一件很重要的事情。你必须找到一种更好的方法来编写你的类(或者用"Activity activity“替换"Context context”,并在需要时将其转换为"Context“)。
致以问候。
只是为了更新我的答案。获取Activity context
的最简单方法是在Activity
中定义一个static
实例。例如
public class DummyActivity extends Activity
{
public static DummyActivity instance = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Do some operations here
}
@Override
public void onResume()
{
super.onResume();
instance = this;
}
@Override
public void onPause()
{
super.onPause();
instance = null;
}
}
然后,在您的Task
、Dialog
、View
中,您可以使用这种代码来获取Activity context
if (DummyActivity.instance != null)
{
// Do your operations with DummyActivity.instance
}
https://stackoverflow.com/questions/9891360
复制相似问题