无法从静态上下文引用非静态

时间:2015-01-18 14:16:40

标签: java android static non-static

我有这个问题,我的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();


                    }
                });
我应该怎么做?有什么建议改变一些方法吗? Ii正在学习btw教程。

4 个答案:

答案 0 :(得分:0)

很难说清楚,因为看起来你还没有提供所有的代码,(PlaceholderFragment看起来是一个嵌套的类),但我的猜测是{{1周围类中定义的不是静态的,因此无法在getApplicationContext()内访问。要引用它,您需要有一个周围类的实例可以调用它。如果没有更多的上下文,就很难建议如何重构这个工作。

答案 1 :(得分:0)

这不会奏效 - 请尝试拨打getActivity(),而不是Context。例如类似的东西:

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

有关此问题的详细讨论,请参阅this SO question

答案 2 :(得分:0)

如果您的片段已附加到您可以使用的活动:

getActivity()

而不是getApplicationContextlistActivity.this

答案 3 :(得分:0)

你可以使用一个处理程序,在onItem上你只需sendMessage,并在收到这条消息时在处理程序中显示toast