Add data to a listview on fragment

android, android-fragmentactivity, android-listview

Solution

There's a number of problems with this method, but the root of it is that the `FragmentTransaction` `replace()` method that adds the fragment that, I assume, contains the `ListView` you're trying to find is an asynchronous process. The fragment isn't added to the Activity's view hierarchy immediately but some time later.

If you want to add things to a `ListView` in a `Fragment`, why not do it from within the `MainFragment` subclass' `onCreateView()` method instead? That's how it's intended to work.

EDIT: A typical `onCreateView()`:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_layout, container, false);
    ListView lv = (ListView) view.findViewById(R.id.listf);
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_row,R.id.labeld, listS));             
    return view;
}

Problem

I have an fragment on activity, with an listview element on it. Can't add data to listview. Can someone tell me what is wrong? ``` public class MainActivity extends FragmentActivity { public String[] listS ={"item1","item2","item3"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); MainFragment f = new MainFragment(); ft.replace(R.id.fragcontainer, f); ft.commit(); //here the problem occurs ListView lv = (ListView)findViewById(R.id.listf); lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_row,R.id.labeld, listS)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } ``` Fragment's class: ``` public class MainFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sis){ return inflater.inflate(R.layout.fragment_layout, container, false); } } ```

Original source