0

コードにバグがありますが、機能する場合と機能しない場合があるため、理由がわかりませんでした。問題の指摘にご協力いただければ幸いです。ここに問題があります:

フラグメントでは、Gridview+をセットアップしますListView。ユーザーがグリッドセル (強調表示されたセル) をクリックすると、そのセルが上にあるという情報が表示されますListView(ユーザーが物理的なクリック操作を実行すると、これはうまく機能します)。のデータを再生成するボタンもあり、クリックを自動的GridViewに実行します。データは正しく生成され、セルは期待どおりに強調表示されます (これは内部クラスで実行されます) が、レンダリングされません (これはフラグメントで実行されます)。デバッグを行い、期待どおりに行が実行されましたが、何も起こりませんでした。ただし、入力データが異なる同じボタンをクリックすると、機能することがあります。GridViewListView

以下は、ツールバーのボタンがクリックされたときの私のクラスのサンプルフローです:

  1. toolbarButtonsAction (方法 1)

  2. 内部クラス

    • データの生成
    • クリックを自動的に実行: フラグメント内のメソッド 2 をトリガーして、フラグメントを更新します。ListView
  3. 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() が呼び出されない場合があります。これは問題です

4

1 に答える 1

0

チャットで話し合った結果、解決に至りました。引用させてください:

問題は、listView とそのアクティビティ TabHost レイアウトが原因で、listViewAdapter の getView() が呼び出されないことがあります。ここで、main_activity の android:layout_height="fill_parent" とリスト ビューのレイアウトを android:layout_height="wrap_content" に変更します。

そのため、レイアウトエラーがずっとありましたが、実際には見つけるのが難しく、非常に意地悪になる可能性があります.

于 2013-03-06T14:57:09.410 に答える