Не удается разрешить метод getActivity (), который я использую для инициализации адаптера - PullRequest
0 голосов
/ 09 ноября 2018

Я создаю пользовательский адаптер MyAdapter и надуваю ListView listView для отображения массива String data . Я получаю сообщение об ошибке при инициализации MyAdapter с использованием метода getActivity () следующим образом:

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 голосов
/ 09 ноября 2018

Вот решение.

 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.

Спасибо всем за ваш ответ. ;)

0 голосов
/ 09 ноября 2018

вы можете получить контекст разными способами:

    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);
0 голосов
/ 09 ноября 2018

Метод getActivity () возвращает контекст действия.

Попробуйте это

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

Если вы хотите текущую активность, тогда просто

MyAdapter adapter = new MyAdapter(this,data);
0 голосов
/ 09 ноября 2018

Полагаю, вы скопировали код из сети.
Вы должны использовать getActivity(), когда работаете с фрагментом, чтобы ссылаться на контекст действия хоста, но, поскольку вы находитесь в действии, вам нужно только this, чтобы получить контекст текущего действия.

MyAdapter adapter = new MyAdapter(this, data);
0 голосов
/ 09 ноября 2018

Вы уже в Деятельности, когда вы инициализируете MyAdapter. Класс Activity не имеет метода getActivity(), потому что это уже Activity.

Использование this:

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