2016-03-23 3 views
-1

-Code in Aktivität:Alerdialog mit Gridview (Imageadpater)

public void iconSelector(View view) { 
    CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.create_coordinator); 
    LayoutInflater inflater = getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.item_icon_grid_layout, coordinatorLayout, false); 


    GridView gridView = (GridView) dialogView.findViewById(R.id.itemIconGridLayout); 
    database = new Database(this); 
    mId = database.getLastIdOD(); 
    if(mId>=1) { 
     iconList = database.getIconList(); 

    } 
    database.close(); 
    gridView.setAdapter(new IconsAdapter(getApplicationContext(),iconList)); 
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      mIcon = iconList.get(position).getName(); 
     } 
    }); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(dialogView); 
    builder.setTitle(R.string.iconChoose); 
    mIconSelectorDialog= builder.show(); 
} 

-Code in IconsAdapter:

public class IconsAdapter extends BaseAdapter { 
    private Context mContext; 
List<Icon> iconList; 

public IconsAdapter(Context context,List<Icon> list){ 
    mContext = context; 
    iconList = list; 
    int d = iconList.size(); 
    String i= ""+d; 
    Log.d("MyLogIconAdapter",iconList.get(0).getName()); 
    Log.d("MyLog",i); 
} 

public int getCount() { 
    return iconList.size(); 

} 

public Object getItem(int position) { 
    return iconList.get(position).getId(); 
} 

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


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View grid; 
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     grid = new View(mContext); 
     grid = inflater.inflate(R.layout.item_icon_grid,null); 
     ImageView imageView = (ImageView) grid.findViewById(R.id.imageItemIconGrid); 
     int iconResId = mContext.getResources().getIdentifier(iconList.get(position).getName(), "drawable", mContext.getPackageName()); 
     imageView.setImageResource(iconResId); 
    } else { 
     grid = (View) convertView; 
    } 


    return grid; 
} 

}

Item_icon_grid:

<ImageView 
    android:id="@+id/imageItemIconGrid" 
    android:src="@drawable/ic_drafts_white_24dp" 
    android:layout_width="18dp" 
    android:layout_height="18dp" 
    android:layout_gravity="center" /> 

item_icon_grid_layout:

<GridView 
    android:id="@+id/itemIconGridLayout" 
    android:numColumns="auto_fit" 
    android:background="#ffffff" 
    android:verticalSpacing="5dp" 
    android:horizontalSpacing="5dp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</GridView> 

Log:

Schwerwiegende Ausnahme: main Prozess: com.universe.time.officereminder, PID: 25213 java.lang.NullPointerException: Versuch virtuelle Methode ‚VOID android.widget.ImageView aufzurufen .setImageResource (int) 'für eine Nullobjektreferenz bei com.universe.time.proffesionaldiary.adapters.IconsAdapter.getView (IconsAdapter.java:60) bei android.widget.AbsListView.obtainView (AbsListView.java:2828) bei android.widget.GridView.onMeasure (GridView.java:1064) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.LinearLayout.measureChildBeforeLayout (Linearlayout. java: 1435) bei android.widget.LinearLayout.measureVertical (LinearLayout.java:721) bei android.widget.LinearLayout.onMeasure (LinearLayout.java:612) bei android.view.View.measure (View.java: 18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java:430) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java:430) bei android .view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1435) bei android.widget .LinearLayout.measureVertical (LinearLayout.java:721) bei android.widget.LinearLayout.onMeasure (LinearLayout.java:612) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java:430) bei android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java: 135) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java:430) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java:430) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.LinearLayout. measureChildBeforeLayout (LinearLayout.java:1435) bei android.widget.LinearLayout.measureVertical (LinearLayout.java:721) bei android.widget.LinearLayout.onMeasure (LinearLayout.java:612) bei android.view.View.measure (View.java:18647) bei android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5832) bei android.widget.FrameLayout.onMeasure (FrameLayout.java: 430) bei com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure (PhoneWindow.java:3012) bei android.view.View.measure (View.java:18647) bei android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2298) bei android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1320) bei android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1588) bei android.view.ViewRootImpl.doTraversal (ViewRootImpl. java: 1230) bei android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6748) bei android.view.Choreographer $ CallbackRecord.run (Choreographer.java:777) bei android.view.Choreographer.doCallbacks (Choreographer.java:590) bei android.view.Choreographer.doFrame (Choreographer.java:560) bei android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:763) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:145) bei android .app.ActivityThread.main (ActivityThread.java:6126) bei java.lang.reflect.Method.invoke (systemeigene Methode) bei java.lang.reflect.Method.invoke (Method.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1399) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1194)

+0

von Ihrem Adapter Du zum Zeitpunkt der setImageResources null Bilder werden immer – Manifest

+0

Mögliches Duplikat [Was ist eine Null-Zeiger-Ausnahme, und wie kann ich es beheben?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-fix-it) –

Antwort

0

Fehler lassen deutlich erkennen, dass Sie versuchen, das Bild in null Bildansicht zu setzen, so überprüfen Sie

ImageView imageView = (ImageView) grid.findViewById(R.id.imageItemIconGrid);

Ist die Bildansicht Teil Ihres Rasterlayouts, wenn ja, dann überprüfen Sie die ID für das Rasterlayout und für Imageview, ob es richtig ist oder nicht.

bitte debuggen und überprüfen.

1

Sie können den folgenden Code versuchen, kann es hilfreich sein.

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     View grid = inflater.inflate(R.layout.item_icon_grid, null); 

     if (convertView == null) { 
      ImageView imageView = (ImageView) grid.findViewById(R.id.imageItemIconGrid); 
      int iconResId = mContext.getResources().getIdentifier(iconList.get(position).getName(), "drawable", mContext.getPackageName()); 
      imageView.setImageResource(iconResId); 
     } else { 
      grid = (View) convertView; 
     } 
     return grid; 
    } 

Referenz: https://www.caveofprogramming.com/guest-posts/custom-gridview-with-imageview-and-textview-in-android.html