на нестатический нельзя ссылаться из статического контекста

У меня есть эта проблема, когда мои listActivity.this и getApplicationContext получают сообщение об ошибке «на нестатический объект нельзя ссылаться из статического контекста»

Я хочу составить список в своей активности фрагмента

    public static class PlaceholderFragment extends Fragment {

            ListView listView;
            public PlaceholderFragment() {
            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {


                View rootView = inflater.inflate(R.layout.fragment_list, container, false);
                return rootView;

                //haal listView van XML
                listView = (ListView) rootView.findViewById(R.id.list);

                //waarden in Array definiëren om lijst te tonen

                String[] values = new String[] {"Park","Café","Nachtclub","Straat","School/Opleiding"};

                // Definieert nieuwe Adapter
                // Eerste paramater = context
                // Tweede parameter = layout voor rijen
                // Derde parameter = ID voor de textView
                // Vierde = data array

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(listActivity.this, //cannot reference non-static from a static
                        android.R.layout.simple_list_item_1,android.R.id.text1, values);

                //Adapter instellen aan lijst
                listView.setAdapter(adapter);


                //onClick event voor lijst
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        //listview clicked item index
                        int itemPosition = position;

                        //listview clicked item value
                        String itemValue = (String) listView.getItemAtPosition(position);

                        //show alert
//cannot reference non-static from a static
                        Toast.makeText(getApplicationContext(),
                                "Position: " + itemPosition + " Listitem: " + itemValue, Toast.LENGTH_LONG).show();


                    }
                });

что мне делать ребята? Любые предложения по изменению некоторых методов здесь? Я следил за учебником, кстати.


person TheNoob    schedule 18.01.2015    source источник
comment
Вы искали эту ошибку? Имеет несколько попаданий в поисковую систему   -  person Reimeus    schedule 18.01.2015
comment
Я сделал, и никто из них, кажется, не помогает моей ситуации   -  person TheNoob    schedule 18.01.2015
comment
Вам следует вернуться к изучению основ. Читайте, пока не поймете, что такое статическая ссылка по сравнению с экземпляром класса (объектом), затем попробуйте еще раз,   -  person Simon    schedule 18.01.2015


Ответы (4)


Трудно сказать точно, так как кажется, что вы не предоставили весь код (PlaceholderFragment выглядит как вложенный класс), но я предполагаю, что getApplicationContext(), определенный в окружающем классе, не является статическим и поэтому недоступен внутри из PlaceholderFragment. Чтобы обратиться к нему, вам нужно иметь доступный экземпляр окружающего класса для его вызова. Без дополнительного контекста было бы трудно предложить, как вы могли бы реорганизовать это, чтобы оно работало.

person laz    schedule 18.01.2015

Это не сработает. Попробуйте вызвать getActivity() там, где вам нужен контекст. вместо. например что-то типа:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,android.R.id.text1, values);

а затем ссылайтесь на внешний класс в вашей анонимной реализации:

Toast.makeText(PlaceholderFragment.getActivity(), "Position: " + itemPosition + " Listitem: " + itemValue, Toast.LENGTH_LONG).show();

См. этот вопрос SO для хорошего обсуждения этого вопроса.

person declension    schedule 18.01.2015

Если ваш фрагмент прикреплен к действию, вы можете использовать:

getActivity()

вместо getApplicationContext и listActivity.this.

person Simas    schedule 18.01.2015
comment
После того, как я изменил это, мой findViewById теперь получает то же сообщение об ошибке. - person TheNoob; 18.01.2015
comment
Класс фрагмента @TheNoob не имеет метода findViewById. Вы хотите getActivity().findViewById() - person Simas; 18.01.2015
comment
заявление стало недоступным. - person TheNoob; 18.01.2015
comment
@TheNoob переместите оператор return в конец метода. И изучите немного Java, прежде чем задавать вопросы. - person Simas; 18.01.2015
comment
Внутри фрагмента вы, вероятно, хотите найти дочерние элементы фрагмента, а не макета активности, поэтому он будет более вероятным rootView.findViewById. - person Eugen Pechanec; 18.01.2015
comment
Хороший звонок @EugenPechanec. - person Simas; 18.01.2015

вы можете использовать обработчик, в onItemClick вы просто отправляете сообщение и показываете тост в обработчике, когда получаете это сообщение

person H.Bear    schedule 08.09.2017