2013-06-21 3 views
0

Я делаю список, который будет помещен под другое представление. На основании другой статьи я должен содержать другое представление в заголовке списка. Я использую ListFragment и присоединяюсь к нескольким действиям. Поэтому я создаю метод для настройки заголовка ListFragment.ListFragment getListView null

Проблема заключается в том, что метод getListView() возвращает null, хотя я вызываю addHeader после отображения списка.

Почему 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); 
    } 

Вот активность, вызвать фрагмент

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

Я не могу видеть, где вы звоните AddHeader. – Blackbelt

+0

Я называю это активностью, которую хочу включить в список новостей – skaciw

ответ

0

Override OnCreate вида и пусть возвращает View, содержащее 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; 
} 
+0

должен ли я создать новый макет xml или просто добавить listview внутри макета в template_activity_home? – skaciw

+0

создать новый – Blackbelt

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

Это где макет будет завышен. Следовательно, он является нулевым, поскольку он еще не завышен.

+0

что такое R.layout.example_fragment? что макет, который используется в деятельности? – skaciw

+0

Это макет, используемый для вашего фрагмента. Замените это ссылкой на макет вашего фрагмента. – samleighton87