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

Java 无法从静态上下文引用非静态,java,android,static,non-static,Java,Android,Static,Non Static,当我的listActivity.this和getApplicationContext收到错误消息“无法从静态上下文引用非静态”时,我遇到了此问题 我想在片段活动中列出一个列表 public static class PlaceholderFragment extends Fragment { ListView listView; public PlaceholderFragment() { }

当我的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();


                    }
                });
公共静态类占位符片段扩展片段{
列表视图列表视图;
公共占位符片段(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u列表,容器,false);
返回rootView;
//haal listView van XML
listView=(listView)rootView.findViewById(R.id.list);
//waarden在阵列中定义为om lijst te tonen
字符串[]值=新字符串[]{“公园”、“咖啡馆”、“纳奇俱乐部”、“斯特拉特”、“学校/奥佩丁”};
//Defineert nieuwe适配器
//Eerste paramater=上下文
//Tweede参数=布局voor rijen
//Derde参数=ID voor de textView
//Vierde=数据数组
ArrayAdapter=new ArrayAdapter(listActivity.this,//无法从静态
android.R.layout.simple_list_item_1,android.R.id.text1,value);
//适配器instellen aan lijst
setAdapter(适配器);
//onClick事件voor lijst
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//listview单击的项目索引
int itemPosition=位置;
//listview单击的项目值
String itemValue=(String)listView.getItemAtPosition(position);
//显示警惕
//无法从静态文件引用非静态文件
Toast.makeText(getApplicationContext(),
位置:“+itemPosition+”列表项:“+itemValue,Toast.LENGTH_LONG).show();
}
});

伙计们,我该怎么办?有什么关于更改某些方法的建议吗?顺便说一句,我是在遵循一个教程。

很难说清楚,因为您似乎没有提供所有的代码,(
placeholder fragment
看起来是一个嵌套类),但我猜
getApplicationContext()周围类中定义的
不是静态的,因此无法在占位符片段中访问。要引用它,您需要有一个周围类的实例来调用它。如果没有更多上下文,则很难建议如何重构它以使其工作。

这不起作用-try调用
getActivity()
,在需要的地方调用。例如:

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

有关这方面的一些好的讨论,请参阅。

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

getActivity()

您可以使用处理程序,而不是
getApplicationContext
listActivity。此

您可以在onItemClick中使用处理程序发送消息,并在收到此消息时在处理程序中显示toast(土司)

您搜索过此错误吗?在搜索引擎上点击了几次,但似乎没有一次对我的情况有帮助您应该离开回到学习基础知识。阅读直到您了解静态引用与类实例(对象)之间的区别,然后在我更改findViewById现在收到相同的错误消息后重试。@TheNoob fragment类没有
findViewById
方法。您想要
getActivity().findViewById()
语句已变得不可访问。@noob将return语句移到方法的末尾。在提问之前先学习一些java。在片段中,您可能希望找到片段的子项而不是活动的布局,因此更可能是
rootView.findViewById
getActivity()