无法解析我用来初始化适配器的方法“ getActivity()”

时间:2018-11-09 14:43:26

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

我正在创建一个自定义适配器 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;
    }
}

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

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

使用this

MyAdapter adapter = new MyAdapter(this, data);

答案 1 :(得分:1)

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

MyAdapter adapter = new MyAdapter(this, data);

答案 2 :(得分:0)

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

尝试

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

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

MyAdapter adapter = new MyAdapter(this,data);

答案 3 :(得分:0)

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

    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);

答案 4 :(得分:0)

这是解决方案。

 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时,我传递了错误的参数。

感谢大家的回答。 ;)