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フラグメントは、アクティビティのビュー階層にすぐには追加されませんが、しばらくしてから追加されます。

に物事を追加したい場合は、代わりにサブクラスのメソッド内から追加ListViewFragmentてみませんか?それが機能することを意図した方法です。MainFragmentonCreateView()

編集:典型的な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のアクティビティを要求していることです

"this。"findViewById(..。

フラグメントにビューを要求するか、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 に答える