【问题标题】:Cannot resolve method 'getActivity()' which I am using to initialize Adapter无法解析我用来初始化适配器的方法“getActivity()”
【发布时间】:2019-04-13 03:38:28
【问题描述】:

我正在创建一个自定义适配器MyAdapter 并膨胀一个ListView listView 以显示一个字符串数组data。使用 getActivity() 方法初始化 MyAdapter 时出现错误,如下所示:

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private String[] data = {"Sanskrit", "Bhojpuri", "Newari", "Magar",
            "Gurung", "English", "Maithili", "Tamil", "Hindi",
            "French", "German", "Russian", "Chinese"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.list_view);

        MyAdapter adapter = new MyAdapter(getActivity(), data);
        listView.setAdapter(adapter);
    }
}

class MyAdapter extends ArrayAdapter {
    String[] data;

    public MyAdapter(Context context, int res, String[] data) {
        super(context,res);

        this.data = data;
    }

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

        LayoutInflater inflater = (LayoutInflater) getContext().
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View row = inflater.inflate(R.layout.custom_list_view, parent, false);

        TextView textView = row.findViewById(R.id.textView);

        textView.setText(data[position]);
        return row;
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 请分享stacktrace错误信息。
  • @JeelVankhede 没有堆栈跟踪。这是一个编译时错误。
  • 请不要在问题正文或标题中使用“已解决”。改为发布自我答案或接受有助于您解决问题的答案之一。
  • @Shashanth 我在答案中添加了解决方案。这是我的第一篇文章。所以对它一无所知。感谢您的编辑。

标签: java android list android-listview android-arrayadapter


【解决方案1】:

当您初始化MyAdapter 时,您已经在活动中。 Activity 类没有 getActivity() 方法,因为它已经是 Activity。

使用this:

MyAdapter adapter = new MyAdapter(this, data);

【讨论】:

    【解决方案2】:

    我猜你是从网上复制代码的。
    当您使用片段来引用宿主活动的上下文时,您应该使用getActivity(),但由于您处于活动中,因此您只需要this 即可获取当前活动的上下文。

    MyAdapter adapter = new MyAdapter(this, data);
    

    【讨论】:

      【解决方案3】:

      getActivity() 方法返回活动的上下文。

      试试这个

      MyAdapter adapter = new MyAdapter(YourActivityName.this,data);

      如果您想要当前的活动,那么只需

      MyAdapter adapter = new MyAdapter(this,data);
      

      【讨论】:

        【解决方案4】:

        您可以通过多种方式获取上下文:

            MyAdapter adapter = new MyAdapter(getBaseContext(),data);
            listView.setAdapter(adapter);
        

        或者您可以使用应用程序上下文:

            MyAdapter adapter = new MyAdapter(getApplicationContext(),data);
            listView.setAdapter(adapter);
        

        或当前活动上下文:

            MyAdapter adapter = new MyAdapter(this,data);
            listView.setAdapter(adapter);
        

        【讨论】:

          【解决方案5】:

          这是解决方案。

           MyAdapter adapter = new MyAdapter(getActivity(),data); 
              ...
          

          MyAdapter adapter = new MyAdapter(this,R.layout.custom_list_view,data);
          

          public MyAdapter(Context context,int res,String[] data) {
          super(context,res);
          

          public MyAdapter(Context context,int resource,String[] data) {
          super(context,resource,data);
          

          我在初始化 MyAdapter 实例以及创建 MyAdapter 构造函数和调用 super 时传递了错误的参数。

          感谢大家的回答。 ;)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-18
            • 1970-01-01
            • 1970-01-01
            • 2017-09-30
            • 1970-01-01
            • 2023-03-13
            • 2023-03-27
            • 1970-01-01
            相关资源
            最近更新 更多