无法解析方法 startActivity()

Posted

技术标签:

【中文标题】无法解析方法 startActivity()【英文标题】:Cannot resolve method startActivity() 【发布时间】:2016-01-15 08:35:27 【问题描述】:

我是 android 开发的新手,在更改活动时遇到了一些问题。我正在尝试从方法中更改活动,但我收到错误cannot resolve method startActivity,并且在参数结束时出现错误Cannot resolve constructor 'Intent (...)'。我发现 a question here 有同样的问题,并试图将他们的回复应用到我的程序中,但没有任何乐趣。

代码如下:

public void open301(View view) 
    startActivity(new Intent(CustomAdapter.this, ThreeZeroOne.class));

在查看上面链接的问题的回复之前,代码看起来像这样,错误相同:

public void open301(View view) 
   Intent openThree = new Intent(this,ThreeZeroOne.class);
    startActivity(openThree);

完整代码:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.content.Intent;

public class CustomAdapter extends BaseAdapter 
  String[] result;
  Context context;
  int[] imageId;

  private static LayoutInflater inflater = null;

  public CustomAdapter(selectGame SelectGame, String[] prgmNameList, int[] prgmImages) 
    result = prgmNameList;
    context = SelectGame;
    this.imageId = prgmImages;
    inflater = (LayoutInflater) context.getSystemService(Context.
        LAYOUT_INFLATER_SERVICE);
  

  @Override
  public int getCount() 
    return result.length;
  

  @Override
  public Object getItem(int position) 
    return position;
  

  @Override
  public long getItemId(int position) 
    return position;
  

  public class Holder 
    TextView tv;
    ImageView img;
  

  @Override
  public View getView(final int position, View convertView, ViewGroup parent) 
    Holder holder = new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.game_selection, null);
    holder.tv = (TextView) rowView.findViewById(R.id.txt);
    holder.img = (ImageView) rowView.findViewById(R.id.img);
    holder.tv.setText(result[position]);
    holder.img.setImageResource(imageId[position]);
    rowView.setOnClickListener(new OnClickListener() 
      @Override
      public void onClick(View v) 
        Toast.makeText(context, "Beginning game " + result[position], Toast.LENGTH_SHORT).show();

      
    );
    return rowView;
  

  public void open301(View view) 
    Intent openThree = new Intent(this,ThreeZeroOne.class);
    startActivity(openThree);
  

【问题讨论】:

你在哪里尝试执行该方法?在一个活动中?班级?片段? 在课堂上,我将发布代码。 【参考方案1】:

您应该使用适配器的上下文:

public void open301(View view) 
  Intent openThree = new Intent(context,ThreeZeroOne.class);
  context.startActivity(openThree);

【讨论】:

您能否解释一下上下文是什么以及我们为什么在这种特定情况下使用它?谢谢。 ***.com/questions/3572463/what-is-context-on-android【参考方案2】:

要开始一个新的活动,你需要一个上下文来开始,而你当前的活动“BaseAdapter”不是一个上下文,幸运的是每个视图都有一个上下文,所以你可以这样做:

public void open301(View view) 
    Intent openThree = new Intent(view.getContext(), ThreeZeroOne.class);
    view.getContext().startActivity(openThree);

【讨论】:

这有点工作,我不需要将意图名称放在 startActivity 的括号中吗?否则它怎么知道要开始什么活动。 - 这与您的旧评论有关。 我编辑了我的答案以使其清楚,还有其他疑问吗?【参考方案3】:

首先你应该得到你的Context:

private Context context;

public CustomAdapter(Context context) 
    this.context = context;

然后:

context.startActivity(openThree);

【讨论】:

【参考方案4】:

您还可以传递消息

 Intent i = new Intent( getContext(),Chat.class);
            i.putExtra("id",user.id);
            i.putExtra("name",user.name);
            getContext().startActivity(i);

【讨论】:

以上是关于无法解析方法 startActivity()的主要内容,如果未能解决你的问题,请参考以下文章

源码解析之-基于Android10.0的startActivity

无法解析 Android 编程的意图

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla

无法使用Chooser为每个应用只询问一次startActivity()

OpenHarmony3.1-WIFI子系统之STA模式源码解析

Activtiy完全解析(layout的inflate过程)