5

我的代码有语法错误,在“getView”中,我想为“更新”按钮创建一个侦听器以移动到另一个活动:

在此处输入图像描述

@Override
    public View getView(int position, View convertView, ViewGroup parent) {


        LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
        View rowView = l.inflate(R.layout.temp, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.textView1);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1);
        Button update = (Button) rowView.findViewById(R.id.button1);

//      update.setOnClickListener(new View.OnClickListener() {
//          
//          @Override
//          public void onClick(View v) {
//
//                 Intent redirect = new Intent(getApplicationContext(),Update.class);
//                 startActivity(redirect);
//              
//          }
//      });




        textView.setText(sa.get(position));


        return rowView;
    }

我试图修复这些关于“意图”的错误,但我失败了:(

  1. 未定义类型 new View.OnClickListener() 的方法 startActivity(Intent)

  2. 方法 getApplicationContext() 未定义 new View.OnClickListener() 类型

甚至当我从“onClick”方法中移动这些语句时,问题也没有改变!我导入了“Intent”库,如何解决????

4

5 回答 5

14

如果您的适配器在不同的文件中,您将需要活动上下文。

您需要将活动上下文从活动类传递给适配器构造函数。

http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)

startActivity是您的活动类的方法。所以你需要活动上下文来启动活动。

也代替getApplicationContext使用活动上下文。

何时调用活动上下文或应用程序上下文?

通过 commonsware 检查答案。

     update.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

            Intent redirect = new Intent(context,Update.class);
            context.startActivity(redirect);    
      }
      });
于 2013-07-06T18:45:37.257 回答
2

尝试

final Activity thisActivity = this;

update.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View v) {

                 Intent redirect = new Intent(thisActivity,Update.class);
                 thisActivity.startActivity(redirect);

          }
      });
于 2013-07-06T18:44:19.220 回答
2

对于我来说类似的问题,这对我有帮助:

  @Override
  public void onClick(View v) {
                    Intent intent = new Intent(G.context, SecondActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    G.context.startActivity(intent);
  }
  });

在 G 类中添加上下文:

public class G extends Activity {

    public static Context context;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        context = getApplicationContext();

    }
}
于 2015-08-20T08:27:06.937 回答
1

你只需要打电话context.startActivity,可以按照以下步骤

三个简单的步骤

1) 声明局部变量Context mCtx

2)通过将参数传递给构造函数/方法,或者如果您在活动中使用上述代码,则在 onCreate 方法中使用活动上下文对其进行初始化。

3) 打电话mCtx.startActivity(intent);

或者

你可以打电话ActivityName.this.startActivity()

编辑:- 作为 dmon 评论,您只需使用本地上下文实例

于 2013-07-06T18:44:50.997 回答
0

您的问题的根源是您无法从应用程序上下文启动 Activity(仅从您有权这样做的活动上下文)。原因是 android 将应用程序的所有活动捆绑为一个组(任务),以便允许不同应用程序之间的多任务处理。例如,当您启动一个新应用程序或按下主页按钮时,您的应用程序(连同它的活动回栈)将进入后台并将场景留给新任务(具有不同的活动回栈等等) )。有关此机制的更多信息,您可以查看此处(http://developer.android.com/guide/components/tasks-and-back-stack.html)。

为了获得可以启动新活动的上下文,您始终可以通过调用 viewgroup.getContext() 获取正在膨胀的视图父级的上下文 - 即使您必须将视图组声明为最终视图,这没关系,因为您不应该触摸父母。

您的 getView 的草稿:

@Override
public View getView(int position, View convertView, final ViewGroup parent) {


    LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View rowView = l.inflate(R.layout.temp, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.textView1);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1);
    Button update = (Button) rowView.findViewById(R.id.button1);

  update.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
             Intent redirect = new Intent(parent.getContext(),Update.class);
             startActivity(redirect);
      }
  });




    textView.setText(sa.get(position));


    return rowView;
}
于 2014-07-02T14:48:48.093 回答