3

我有一个关于活动的片段,上面有一个 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;
    }
}

片段的类:

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

}
4

4 回答 4

6

这个方法有很多问题,但它的根源是FragmentTransaction replace()添加片段的方法,我假设,包含ListView你试图找到的片段是一个异步过程。片段不会立即添加到 Activity 的视图层次结构中,而是稍后添加。

如果你想在 aListView中添加东西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;
}
于 2012-12-04T12:43:41.200 回答
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;
        }
    }
于 2012-12-04T13:07:17.740 回答
0

问题是您正在询问该 ListView 的活动

“这个。”findViewById(...

您可以向 Fragment 请求视图,或在 Fragment 类中管理 listView 的内容。

于 2012-12-04T13:14:02.230 回答
0

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

主要问题是IDE在ID前面附加了“android”

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>
于 2014-11-19T01:45:12.277 回答