Fehler beim Scrollen im GridView

S

selmaohneh

Neues Mitglied
0
Moin!

Ich habe mir ein Gridview erstellt, dem ich TextViews oder ImageViews hinzufügen kann. Außerdem habe ich onItemClick und onItemLongClick Ereignisse geschrieben. Alles funktioniert wunderbar, nur:

Wenn ich ganz viele Elemente zu meinem GridView hinzufüge wird irgendwann natürlich ein Scrollen benötigt. Sobald ich hier einen gewissen frühen Punkt überrscrolle bekomme ich eine Fehlermeldung:

Code:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
            at android.widget.AbsListView.obtainView(AbsListView.java:2360)
            at android.widget.GridView.makeAndAddView(GridView.java:1433)
            at android.widget.GridView.makeRow(GridView.java:361)
            at android.widget.GridView.fillDown(GridView.java:302)
            at android.widget.GridView.fillGap(GridView.java:262)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4968)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3398)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3774)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3612)
            at android.view.View.dispatchTouchEvent(View.java:8388)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
            at android.view.View.dispatchPointerEvent(View.java:8578)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5791)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
            at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
            at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5762)
            at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5814)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
            at android.view.Choreographer.doCallbacks(Choreographer.java:580)
            at android.view.Choreographer.doFrame(Choreographer.java:548)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
            at android.os.Handler.handleCallback(Handl

Hier ist mein Adapter:

Code:
public class MyAdapter extends BaseAdapter {
    private Context mContext;
    File[] images;

    public MyAdapter(Context c, File imageDir) {
        mContext = c;

        images =imageDir.listFiles();
        List<File> imagesList= new ArrayList<File>(Arrays.asList(images));
        Collections.sort(imagesList,new Comparator<File>() {
            @Override
            public int compare(File lhs, File rhs) {
                return lhs.getAbsolutePath().compareToIgnoreCase(rhs.getAbsolutePath());
            }
        });
        imagesList.toArray(images);
    }

    public int getCount() {
        return images.length;
    }

    public Object getItem(int position) {
        return  images[position].getAbsolutePath();
    }

    public long getItemId(int position) {
        return position;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        TextView textView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(300, 300));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);

            textView = new TextView(mContext);
            textView.setLayoutParams(new GridView.LayoutParams(300, 300));
            textView.setPadding(8, 8, 8, 8);
            textView.setBackgroundColor(mContext.getResources().getColor(android.R.color.holo_blue_light));

            textView.setText(String.valueOf(position + 1));
            textView.setTextSize(100);
            textView.setGravity(Gravity.CENTER);
        } else {
            imageView=null;
            textView=null;
            if(convertView instanceof ImageView){
                imageView = (ImageView) convertView;
            }else{
                textView = (TextView) convertView;
            }
        }

        if(picExists(images[position].getAbsolutePath())==true){
            setPic(imageView,images[position].getAbsolutePath());
            return imageView;
        }else{
            return textView;
        }


    }

And here is a snippet how I am setting my adapter:

Code:
GridView gridView = (GridView) findViewById(R.id.gridView);
        gridView.setAdapter(new MyAdapter(this,imageDir));

        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                openGridViewItemOptions(view, position);
                return true;
            }
        });

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                openGridViewItem(view, position);
            }
        });

Does anyone see my mistake?
 

Ähnliche Themen

S
  • Sempervivum
Antworten
2
Aufrufe
606
Sempervivum
S
D
  • djsnoopy
Antworten
6
Aufrufe
614
djsnoopy
D
S
Antworten
8
Aufrufe
510
swa00
swa00
Zurück
Oben Unten