如何在android中从上下文获取活动?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

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传递给它。我有凉个问题:

  1. 我是否将正确的上下文传递给Profileview?
  2. 我如何从上下文中获取包含活动?
提问于
用户回答回答于

从你的Activity,只是通过在this作为你的布局:

ProfileView pv = new ProfileView(this, null, temp, tempPd);

之后,你将Context在布局中有一个,但你会知道它实际上是你的Activity,你可以使用最让你需要的如下的代码:

Activity activity = (Activity) context;
用户回答回答于

你必须调用活动上下文。要从活动中调用它,只需调用“this”即可。这么容易不是吗?

当你使用:

this.getApplicationContext();

你可以调用BIG上下文,描述你的应用程序并且无法管理你的视图。

Android的一大问题是上下文无法调用您的活动。当有人开始进行Android开发时,避免这种情况是很重要的。你必须找到一个更好的方法来编写你的类(或者用“Activity activity”替换“Context context”,并在需要时将其转换为“Context”)。

只是为了更新我的答案。获取你的最简单的方法是在你的Activity context程序中定义一个static实例Activity。例如:

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

然后,在你的TaskDialogView,你可以下面这段代码:

if (DummyActivity.instance != null)
{
    // Do your operations with DummyActivity.instance
}

扫码关注云+社区