【问题标题】:Trigger a method creates ListView in fragment from inner class, but content of ListView is disappeared sometimes触发方法在内部类的片段中创建ListView,但ListView的内容有时会消失
【发布时间】:2013-03-06 22:57:09
【问题描述】:

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

在一个片段中,我设置了一个Gridview + ListView。当用户单击网格单元(突出显示的单元格)时,我会在 ListView 上显示该单元格的信息(如果用户执行物理单击操作,此工作就可以了)。我还有用于为GridView 重新生成数据的按钮,并将执行一次点击自动GridView 的数据正确生成,并且单元格按预期突出显示(这是在内部类中执行的),但 ListView 未呈现(这是在片段中执行的)。 我进行了调试并且行按预期执行,但没有发生任何事情。但是有时,我单击具有不同输入数据的相同按钮并且它可以工作。

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

  1. toolbarButtonsAction(方法 1)

  2. 内部类

    • 生成数据
    • 自动执行点击:在片段中触发方法2刷新ListView
  3. refreshListView 方法被调用,每一行代码都按预期执行。

    公共类 GridListViewFragment 扩展 Fragment { @覆盖 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() 在某些情况下不会被调用。这是问题

【问题讨论】:

  • 请提供任何帮助。我仍在努力解决这个问题。
  • 只是一个简单的问题,您在列表中显示了什么?文本视图?可能是您在字符串的开头有一个 \n 符号吗?如果是这样,它可能会消失。如果您插入所有具有相同数据的 TextView 并查看是否所有内容都显示了怎么办?如果所有内容都显示相同的文本,那么我确定您的字符串包含一个新的行符号。如果您不明白,请告诉我,因为我可能说得有点难以理解。
  • 我尝试显示列表视图,如果数据可用于选定的网格单元格,则在列表视图中显示该数据。否则,我创建仅显示 1 个字符串“Not Avail String”的新字符串适配器,并将该适配器设置为相同的列表视图(尝试使用单独的列表视图但没有工作)。没有“\n”。因为在这两种情况下都发生了这个问题(数据不可用。和可用。)
  • 好的,你插入过空字符串或“”吗?我在想也许你得到的数据不包含任何东西。
  • 这并不总是发生。内部类作业是为选定的网格单元返回数据数组。我确实调试了数据数组,如预期的那样有效。

标签: android android-listview android-fragments android-gridview


【解决方案1】:

在进行了聊天讨论后,我们得出了一个解决方案。顺便说一句:

问题是 listViewAdapter 中的 getView() 没有被调用 有时由于 listView 及其活动 TabHost 布局。现在我将 main_activity 和列表​​视图布局中的 android:layout_height="fill_parent" 更改为 android:layout_height="wrap_content"

所以一直以来都有一个布局错误,有时确实很难找到,而且可能非常卑鄙。

【讨论】:

  • 感谢您的帮助。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 2014-04-26
相关资源
最近更新 更多