我有这个问题,我的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教程。
答案 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()
而不是getApplicationContext
和listActivity.this
。
答案 3 :(得分:0)
你可以使用一个处理程序,在onItem上你只需sendMessage,并在收到这条消息时在处理程序中显示toast