0

別のビューの下に配置されるリストを作成しています。他の記事に基づいて、リストビューのヘッダーに他のビューを含める必要があります。私は ListFragment を使用しており、いくつかのアクティビティに添付されます。そのため、ListFragment のヘッダーを設定するメソッドを作成しています。

問題は、リストが表示された後に addHeader を呼び出しても、getListView() メソッドが null を返すことです。

getListView() が常に null になるのはなぜですか?

これが私のコードです:

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

Fragment を呼び出すアクティビティは次のとおりです。

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