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:
Hier ist mein Adapter:
And here is a snippet how I am setting my adapter:
Does anyone see my mistake?
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?