我的代码中有一个错误,但我不知道为什么,因为有时它会起作用,有时却不起作用。希望你能帮我指出问题。这是问题:
在一个片段中,我设置了一个Gridview
+ ListView
。当用户单击网格单元(突出显示的单元格)时,我会显示该单元格的信息ListView
(如果用户执行物理单击操作,此工作就很好)。我也有按钮来为 重新生成数据,GridView
并将执行一次点击AUTOMATICALLY。正确生成的数据GridView
和一个单元格按预期突出显示(这是在内部类中执行的),但ListView
没有渲染(这是在片段中执行的)。我进行了调试,并且按预期执行了行,但什么也没发生。但是有时,我单击具有不同输入数据的相同按钮并且它可以工作。
以下是单击工具栏按钮时我的班级的示例流程:
工具栏按钮操作(方法 1)
内部类
- 生成数据
- 执行自动点击:在fragment中触发方法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() 不会被调用。这是问题