【问题标题】:calling an activity from a non-activity(simple layout) through separate class通过单独的类从非活动(简单布局)调用活动
【发布时间】:2018-12-10 10:20:16
【问题描述】:

我正在尝试从非活动类(简单类)调用活动。

我创建了一个选项卡式活动。然后我为片段创建了一个布局。并创建了一个单独的类,我在其中进行一些验证并调用一个活动。但我无法从该非活动类开始活动。

这是我遇到问题的函数

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.guarding_services_layout, container, false);

    p_guard_srvc = p_guard_srvc.findViewById(R.id.guard_booknow_btn);

    p_guard_srvc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //this line, i am unable to write the correct method
            Intent i = new Intent( GuardingScreen.this , HomeScreen.class);
        }
    });

    return rootView;
}

【问题讨论】:

  • 而不是GuardingScreen.this 使用getActivity()
  • 这是因为上下文。只需将上下文传递给您的类构造函数并通过该上下文调用活动。
  • 您需要调用启动活动“startActivity(your intent)”来启动该活动
  • 如果你在一个fragment中,你可以通过getActivity()getContext()获取宿主活动来获取上下文视图当前正在运行的活动

标签: android android-fragments android-intent


【解决方案1】:

试试这个:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.guarding_services_layout, container, false);

    p_guard_srvc = p_guard_srvc.findViewById(R.id.guard_booknow_btn);
    p_guard_srvc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

             Intent i = new Intent( getActivity() , HomeScreen.class);
             getActivity().startActivity(i);

        }
    });

    return rootView;
}

【讨论】:

  • 仔细阅读问题。 OP 想要从 non-activity 调用活动
【解决方案2】:

您应该将活动上下文传递给您的非活动类,并使用上下文开始您的活动。例如:您可以在 Non-Activity 类的构造函数中传递活动上下文,也可以为上下文创建一个 setter 方法。

context.startActivity(new Intent(context,YourClassName.class));

【讨论】:

  • 我无法获取上下文。我脑子里一直在想!但是,我仍然无法解决它。我尝试了各种方法。 getApplicationContext()getActivitiy(),也尝试过制作我想要的类的对象。还尝试获取布局的视图。但我仍然无法获得上下文。
  • 在你的非活动类的构造函数中从你的活动中添加上下文像这样new YourClass(context);
  • 从你上面的代码来看,这段代码属于 Fragment 类,你也可以在 Fragment 中有上下文。那么告诉 mne 你的非活动课程是什么?
  • 好吧,看来我正在调用我的 FREGMENT 类(这是 GuardingScreen 非活动类),因为我创建了它,然后用 FRAGMENT 扩展它......!!我正在尝试从这个 FREGMENT 扩展类中调用活动类....!!
  • 你应该替换你的片段而不是把它称为活动,片段不是一个活动,也许它是一个子活动,它在活动上下文中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
相关资源
最近更新 更多