コードにバグがありますが、機能する場合と機能しない場合があるため、理由がわかりませんでした。問題の指摘にご協力いただければ幸いです。ここに問題があります:
フラグメントでは、Gridview
+をセットアップしますListView
。ユーザーがグリッドセル (強調表示されたセル) をクリックすると、そのセルが上にあるという情報が表示されますListView
(ユーザーが物理的なクリック操作を実行すると、これはうまく機能します)。のデータを再生成するボタンもあり、クリックを自動的GridView
に実行します。データは正しく生成され、セルは期待どおりに強調表示されます (これは内部クラスで実行されます) が、レンダリングされません (これはフラグメントで実行されます)。デバッグを行い、期待どおりに行が実行されましたが、何も起こりませんでした。ただし、入力データが異なる同じボタンをクリックすると、機能することがあります。GridView
ListView
以下は、ツールバーのボタンがクリックされたときの私のクラスのサンプルフローです:
toolbarButtonsAction (方法 1)
内部クラス
- データの生成
- クリックを自動的に実行: フラグメント内のメソッド 2 をトリガーして、フラグメントを更新します。
ListView
refreshListView
メソッドが呼び出され、コードのすべての行が期待どおりに実行されます。public class GridListViewFragment extends Fragment { @Override public void onActivityCreated(Bundle savedInstanceState) { //一般的なライフサイクルのセットアップ。//ここにリストするには多すぎます.....
m_listView = (ListView)getView().findViewById(R.id.eventsList); } //Method 1 View.OnClickListener toolbarButtonsAction = new View.OnClickListener() { // Each view will return different input data each time clicked // This will call the inner class GridCellAdapter // The inner class will generate data to display on grid cell // If necessary, performClick() automatically } //Method 2 public void refreshListView() { //This method will be triggered from ome method in the inner class // I'm sure the Arraylist is valid if (anArrayList.size() == 0) { String[] notAvail = new String[]{"NotAvail String."}; ArrayAdapter<String> nullAdapter = new ArrayAdapter<String> (getActivity(),android.R.layout.simple_list_item_2, android.R.id.text2, notAvail); m_listView.setClickable(false); m_listView.setEnabled(false); m_listView.setAdapter(nullAdapter); }else{ ListViewAdapter lviewAdapter = new ListViewAdapter(getActivity(),anArrayList); lviewAdapter.notifyDataSetChanged(); // Set adapter for ListView m_listView.setClickable(true); m_listView.setEnabled(true); m_listView.setAdapter(lviewAdapter); } } //This is inner class public class GridCellAdapter extends BaseAdapter implements OnClickListener { //Other methods.... @Override public void onClick(View view) { //Generate data for the anArrayList //Call the refreshListView in the fragment. refreshListView(); } }
更新: ListView のコンテンツが消えたように見えますが、ListView はまだ表示されています。ListViewの背景に色を設定して確認しました。
Update2 : ListViewAdapter の getView() が呼び出されない場合があります。これは問題です