【发布时间】:2013-03-06 22:57:09
【问题描述】:
我的代码中有一个错误,但我无法弄清楚为什么,因为有时它会起作用,有时却不起作用。希望你能帮我指出问题。这是问题:
在一个片段中,我设置了一个Gridview + ListView。当用户单击网格单元(突出显示的单元格)时,我会在 ListView 上显示该单元格的信息(如果用户执行物理单击操作,此工作就可以了)。我还有用于为GridView 重新生成数据的按钮,并将执行一次点击自动。 GridView 的数据正确生成,并且单元格按预期突出显示(这是在内部类中执行的),但 ListView 未呈现(这是在片段中执行的)。 我进行了调试并且行按预期执行,但没有发生任何事情。但是有时,我单击具有不同输入数据的相同按钮并且它可以工作。
以下是单击工具栏按钮时我的班级的示例流程:
toolbarButtonsAction(方法 1)
-
内部类
- 生成数据
- 自动执行点击:在片段中触发方法2刷新
ListView
-
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