0

我正在制作一个将放在另一个视图下的列表。根据另一篇文章,我应该在列表视图的标题中包含另一个视图。我正在使用 ListFragment 并将附加到几个活动。所以我正在创建一个方法来设置 ListFragment 的标题。

问题是 getListView() 方法返回 null,尽管我在显示列表后调用了 addHeader。

为什么 getListView() 总是为空?

这是我的代码:

public class NewsListFragment extends ListFragment {

private final int topNewsCount = 5;

private DBNewsDataSource dataSource;
private Activity myActivity;
private Context myContext;
private boolean isHome;

@Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    isHome = true;
    myActivity = getActivity();

    Bundle extras = myActivity.getIntent().getExtras();
    if (extras != null) {
        isHome = extras.getBoolean("isHome");
    }

    dataSource = new DBNewsDataSource(getActivity());
    dataSource.open();

    List<DBNews> news = dataSource.getAllNews();
    List<String> titleList = new ArrayList<String>();
    dataSource.close();

    for(int i = 0; i< (isHome?topNewsCount:news.size()); i++)
    {
        titleList.add(news.get(i).getTitle());
    }

    NewsListArrayAdapter adapter = new NewsListArrayAdapter(getActivity(),news,titleList,isHome);
    setListAdapter(adapter);

  }

  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
    // Do something with the data

  }

  public void addHeader(View v)
  {
      ListView lv = getListView();
      lv.addHeaderView(v);
  }

这是调用片段的活动

public class HomeActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.template_activity_home);
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    NewsListFragment frgNews = new NewsListFragment();
    MainSlideShowFragment frgSS = new MainSlideShowFragment();
            View vw = frgSS.getView();
    frgNews.addHeader(vw);
    fragmentTransaction.add(R.id.layout_news_list , (Fragment) frgNews);
    fragmentTransaction.commit();

    //frgNews.addHeader(vw);
}
4

2 回答 2

0

您正在使用片段但尚未调用

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
     // Inflate the layout for this fragment
     return inflater.inflate(R.layout.example_fragment, container, false);
     }

这是布局将膨胀的地方。因此它是空的,因为它还没有膨胀。

于 2013-06-21T10:36:38.753 回答
0

覆盖 onCreate 视图并让它返回一个包含 ID 为 ListView 的视图android:id="@android:id/list"

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.cart_list,
            null);
    return view;
}
于 2013-06-21T10:38:14.193 回答