如何在非Activity类中使用Intent

13

我在安卓方面遇到一些小问题,想知道如何在一个继承自BaseAdapter而不是Activity类的Adapter类中调用Intent。

6个回答

28

简单地说,你可以使用以下方法:

  Intent intent = new Intent(context,MainActivity.class)
                      .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  context.startActivity(intent); 

这段代码将从您的基础适配器类中调用一个活动。我不知道你想做什么,但这会给你一个提示。


13

要启动一个Activity,你需要Context。请尝试以下步骤:

将context参数传递给继承自BaseAdapter类的构造函数。

示例

public class MyAdapter extends BaseAdapter {
Context context;
public MyAdapter(Context context) {
    this.context=context;
    }

使用以下方法启动活动

Intent i = new Intent();
        i.setClassName("com.abc.mypackage", "com.abc.mypackage.NewActivity");
        context.startActivity(i);
或者
Intent i = new Intent(context, MainActivity.class);
context.startActivity(i);

谢谢,这非常有帮助。 - Make it Simple

4

通常自定义适配器是一个Activity子类的内部类。这意味着它们引用外部Activity,在OuterActivity.this字段中,其中OuterActivity是包含适配器类的活动名称。在这种情况下,您可以使用以下代码启动Intent:

Intent intent = new Intent(OuterActivity.this, NextActivity.class);
OuterActivity.this.startActivity(intent);

在适配器类未嵌套时,可以像ArrayAdapterSimpleAdapter等一样,在其构造函数中传递一个Context参考。您需要将此引用存储在字段中,并使用它启动一个意图。这是可能的,因为您不需要真正需要一个活动来启动一个意图。实际上,您需要一个上下文。以下是示例:

public class CustomAdapter extends BaseAdapter {
    private Context mContext;

    public CustomAdapter(Context context) {
        mContext = context;
    }

    // Other methods...

    private void startIntent()
    {
        Intent intent = new Intent(context, NextActivity.class);
        context.startActivity(intent);
    }
}

3
这解决了我的问题。
//Declare mcontext

Context mContext 

//and where you need to execute code

Intent intent = new Intent(mContext, Classyouwant.class)
                      .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);      
mContext.startActivity(intent);

3
public class Sample{

//Declare context variable
    Context context;

//Constructor where the context is assigned.
    public sample(Context context){

        this.context=context;

    }
//Most functions that you'd find in a typical activity class come from the
//Context class. So to start something, use the class' context to start that intent
    context.startActivity(new Intent(context,sample.class));
}

-4
Intent i = new Intent(NAMEOFCURRENTACTIVTY.this,ANOTHERACTIVITY.class);
finish();
startActivity(i);

不要忘记将该文件的名称放入AndroidManifest.xml文件中<application></application>标签内

AndroidManifest.xml

<activity android:name=".YOURACTIVITYNAME" />

愉快的编码:):)Pragna


1
这个问题是针对非活动类的,你的解决方案适用于活动类。 - Ayaz Ali Khatri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接