0

我的代码中有一个错误,但我不知道为什么,因为有时它会起作用,有时却不起作用。希望你能帮我指出问题。这是问题:

在一个片段中,我设置了一个Gridview+ ListView。当用户单击网格单元(突出显示的单元格)时,我会显示该单元格的信息ListView(如果用户执行物理单击操作,此工作就很好)。我也有按钮来为 重新生成数据,GridView并将执行一次点击AUTOMATICALLY。正确生成的数据GridView和一个单元格按预期突出显示(这是在内部类中执行的),但ListView没有渲染(这是在片段中执行的)。我进行了调试,并且按预期执行了行,但什么也没发生。但是有时,我单击具有不同输入数据的相同按钮并且它可以工作。

以下是单击工具栏按钮时我的班级的示例流程:

  1. 工具栏按钮操作(方法 1)

  2. 内部类

    • 生成数据
    • 执行自动点击:在fragment中触发方法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 回答