我正在尝试在片段中使用ListView
。但getActivity()
为空。我已经搜索过并找到了很多关于这个主题的帖子,但这些都没有用。
这是我的代码:
ListView.java
:
package de.listview.example;
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
public class ListViews extends ListFragment {
private AdapterView.OnItemClickListener listener;
public void makelist()
{
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
}
MainActivity.java
:
public static class ListFragment extends Fragment
{
Context mContext;
@Override
public void onAttach(Activity activity) {
mContext = getActivity();
Log.i("Event", "onAttach called");
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ListViews lst = new ListViews();
lst.makelist();
return inflater.inflate(R.layout.whitelist_content, container, false);
}
}
case 2:
fragmentManager.beginTransaction()
.replace(R.id.content_frame, new ListFragment())
.commit();
break;
答案 0 :(得分:1)
在ListFragment
方法的onAttach()
中,您的片段仍未附加到任何Activity
,这就是您获得空值的原因。
变化:
mContext = getActivity();
要:
mContext = activity;
或者在getActivity()
内使用onCreateView()
。
另一个问题是您正在创建片段,但在使用makeList()
时它没有附加到任何活动,这就是使用getActivity()
时获得空值的原因。
正确的方法是在makeList()
片段的onCreateView()
内调用ListView
。
创建片段后,您还必须添加:
fragmentManager.beginTransaction().replace(R.id.content_frame, lst).commit();
您应该了解如何处理片段:http://developer.android.com/guide/components/fragments.html