将数据添加到片段上的列表视图中

时间:2012-12-04 12:34:58

标签: android android-listview android-fragmentactivity

我有一个活动片段,上面有一个listview元素。无法将数据添加到listview。有人能告诉我出了什么问题吗?

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的课程:

public class MainFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sis){
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }

}

4 个答案:

答案 0 :(得分:6)

此方法存在许多问题,但其根源在于FragmentTransaction replace()方法添加了我认为包含ListView的片段的片段试图找到是一个异步过程。该片段不会立即添加到活动视图层次结构 中,但稍后会更新。

如果您要在ListView中向Fragment添加内容,为什么不在MainFragment子类'onCreateView()方法中进行添加?这就是它的工作方式。

编辑:典型的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;
}

答案 1 :(得分:0)

当你添加代码来定义你的类时,

public class MainFragment extends Fragment {
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sis) {
            View view = inflater.inflate(R.layout.my_fragment, container, false);
            ListView listView = (ListView) view.findViewById(R.id.list);
            return view;
        }
    }

答案 2 :(得分:0)

问题是您要求该ListView的活动

“这个”。findViewById(...

您可以在片段中询问片段以查看视图,或管理Fragment类中listView的内容。

答案 3 :(得分:0)

请使用设计窗口中的列表视图,如下所示。我遇到了确切的问题,现在我可以在源代码中找到该视图。

主要问题是IDE附加了ID“

的”android“
<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>