我的列表视图大小没有根据适配器进行更新,我不确定为什么
(这是在我根据某个类别进行过滤之后发生的,因此我也会发布类别过滤器)
查看图像后,您可以看到在过滤选项卡中还有多余的空白行。
“全部”标签的图像:




这是我的getView方法:

public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater = ctx.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_item, null, true);
        try {
            Item i = getForName(names.get(position));

            if (i.isCategory()) {
                rowView = inflater.inflate(R.layout.cat_item, null, true);
                TextView text = (TextView) rowView.findViewById(R.id.catTxt);
                text.setText(i.getTitle());
                text.setTypeface(null, Typeface.BOLD);
            } else {
                TextView text = (TextView) rowView.findViewById(R.id.listText);
                ImageView image = (ImageView) rowView.findViewById(R.id.listImage);
                try {
                    text.setText(names.get(position));
                    image.setImageResource(imageIds.get(position));
                } catch (Exception e) {
                }
            }
        } catch(Exception a ) {
             a.printStackTrace();
        }
        return rowView;
    };


这是类别过滤器方法:

public void filterCategories(Context context) {
        ArrayList<String> currNames = new ArrayList<>(); //List of the names in the current category (When we start looping)
        ArrayList<Integer> currImaages = new ArrayList<>(); //List of the drawable IDs in the current category (When we start looping)
        ArrayList<String> n = new ArrayList<>(); //Will be the finalized names list
        ArrayList<Integer > is = new ArrayList<>(); //Will be the finalized id list
        for(String name : names) {
            Item item = getForName(name);
            if(item != null)
                if(item.isCategory()) {
                    String cat = item.getAcronym();
                    for(String n1 : names) {
                        Item i1 = getForName(n1);
                        if(i1 != null && !i1.isCategory() && i1.getParent() != null && !currNames.contains(i1.getTitle())) {
                            if(i1.getParent().equals(cat)) {
                                currNames.add(n1);
                                currImaages.add(context.getResources().getIdentifier(getForName(n1).getThumbnail(), "drawable", context.getPackageName()));
                            }
                        }
                    }
                    n.add(name);
                    is.add(0);
                    int c = 0;
                    for(String x : currNames) {
                        n.add(x);
                        is.add(currImaages.get(c));
                        c++;
                    }

                }
            currNames = new ArrayList<>();
            currImaages = new ArrayList<>();
        }
        names = new ArrayList<>();
        imageIds = new ArrayList<>();
        for(String a : n) {
            names.add(a);
        }
        for(Integer a : is) {
            imageIds.add(a);
        }
        notifyDataSetChanged();
    }


这是a.printStackTrace()的输出:

06-04 09:51:38.835  17900-17900/packagename W/System.err﹕ java.lang.IndexOutOfBoundsException: Invalid index 9, size is 7
06-04 09:51:38.835  17900-17900/packagename W/System.err﹕ at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
06-04 09:51:38.835  17900-17900/packagename W/System.err﹕ at java.util.ArrayList.get(ArrayList.java:308)
06-04 09:51:38.835  17900-17900/packagename W/System.err﹕ at packagename.util.ListAdapter.getView(ListAdapter.java:46)
06-04 09:51:38.835  17900-17900/packagename W/System.err﹕ at android.widget.AbsListView.obtainView(AbsListView.java:2387)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.ListView.makeAndAddView(ListView.java:1864)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.ListView.fillDown(ListView.java:698)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.ListView.fillSpecific(ListView.java:1356)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.ListView.layoutChildren(ListView.java:1651)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.AbsListView.onLayout(AbsListView.java:2191)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.onLayout(LinearLayout.java:1468)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705)
06-04 09:51:38.836  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.widget.LinearLayout.onLayout(LinearLayout.java:1468)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.View.layout(View.java:15654)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewGroup.layout(ViewGroup.java:4967)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2102)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1859)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1078)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5875)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.Choreographer.doCallbacks(Choreographer.java:580)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.Choreographer.doFrame(Choreographer.java:550)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
06-04 09:51:38.837  17900-17900/packagename W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
06-04 09:51:38.841  17900-17900/packagename W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5299)
06-04 09:51:38.841  17900-17900/packagename W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
06-04 09:51:38.841  17900-17900/packagename W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
06-04 09:51:38.841  17900-17900/packagename W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
06-04 09:51:38.841  17900-17900/packagename W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

最佳答案

问题是您处理getView方法错误。在这里,我将添加示例代码。

步骤1
您需要这样的viewHolder类。在此处添加膨胀的xml小部件:

 /********* Create a holder Class to contain inflated xml file elements *********/
         public static class ViewHolder{

             public TextView text;
             public TextView text1;
             public TextView textWide;
             public ImageView image;

         }


第2步

在您的getView方法中

/****** Depends upon data size called for each row , Create each ListView row *****/


         public View getView(int position, View convertView, ViewGroup parent) {

                 View vi = convertView;
                 ViewHolder holder;

                 if(convertView==null){

                     /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
                     vi = inflater.inflate(R.layout.tabitem, null);

                     /****** View Holder Object to contain tabitem.xml file elements ******/

                     holder = new ViewHolder();
                     holder.text = (TextView) vi.findViewById(R.id.text);
                     holder.text1=(TextView)vi.findViewById(R.id.text1);
                     holder.image=(ImageView)vi.findViewById(R.id.image);

                    /************  Set holder with LayoutInflater ************/
                     vi.setTag( holder );
                 }
                 else
                     holder=(ViewHolder)vi.getTag();
     return vi;
    }


这是样品问任何疑问

10-07 19:21
查看更多