2012-04-09 6 views
1

ich unendlich Galerie haben auf der Grundlage dieses Beispiel:Text Anpassung für unendliche Scrolling Galerie

http://blog.blundell-apps.com/infinite-scrolling-gallery/, alles, was laufen ok:

genau ich will angewendet Text zu jedem Bild und können Text anpassen auch als Bild gezeigt nach unten, und jedes Bild Text als andere hat diffrenet, aber gelingt es immer noch nicht mit unendlicher Galerie zu tun

enter image description here

Ich habe versucht, mit folgenden Code aber es gab mir FORCE SCHLIEßEN wenn die App läuft,

(VIELLEICHT GIBT ES FALSCH CODES ich geschrieben habe, aber ich bin noch am Lernen JAVA UND beginer IN ANDROID-Entwicklung).

bitte jede Hilfe und Beratung wird

DANK VIEL geschätzt.

MEIN CODE:

GALLERY_ITEM

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/LinearLayout01" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:gravity="center_horizontal"> 
    <ImageView 
    android:id="@+id/image" 
    android:layout_height="300dp" 
    android:layout_width="fill_parent"   /> 
    <TextView 
    android:text="TextView" 
    android:id="@+id/textView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textColor="#B22222"  
    android:textSize="20dp" 
    android:gravity="center" 
    android:layout_margin="30dp" 
    android:layout_below="@+id/image"   /> 

dann in InfiniteScrollingGalleryActivity.java wie folgt ändern:

public class InfiniteScrollingGalleryActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     // Set the layout to use 
    setContentView(R.layout.main); 

    InfiniteGallery galleryOne = (InfiniteGallery) findViewById(R.id.galleryOne); 
    galleryOne.setAdapter(new InfiniteGalleryAdapter(this));  
     }  } 

dann das Unendliche ändern GalleryResourceAdapter.java wie folgt:

public class InfiniteGalleryAdapter extends BaseAdapter { 

    /** The width of each child image */ 
    private static final int G_ITEM_WIDTH = 360; 
    /** The height of each child image */ 
    private static final int G_ITEM_HEIGHT = 240; 
    /** The context your gallery is running in (usually the activity) */ 
     private Context mContext; 
     private int imageWidth; 
     private int imageHeight; 
     private int[] imageIds; 

     public InfiniteGalleryAdapter(Context c, int[] imageIds) { 
      this.mContext = c; 
      this.imageIds = imageIds; } 

     public int getCount() { 
     return Integer.MAX_VALUE;  } 
     public Object getItem(int position) { 
     return position; } 
     public long getItemId(int position) { 
     return position; }  

     private Activity activity; 
     private LayoutInflater inflater=null; 

    public InfiniteGalleryAdapter(Activity a) {  
     final int[] imageIds; 
    activity = a; 
    inflater = (LayoutInflater)activity.getSystemService 
      Context.LAYOUT_INFLATER_SERVICE);   } 
     public class ViewHolder{  
     public TextView text;  
     public ImageView image;   } 
    public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView i = getImageView(); 
try { 

    int itemPos = (position % imageIds.length); 

    i.setImageResource(imageIds[itemPos]); 

    ((BitmapDrawable) i.getDrawable()).setAntiAlias(true); } 

      catch (OutOfMemoryError e) { 

    Log.e("InfiniteGalleryResourceAdapter", "Out of memory creating imageview. 
     Using empty view.", e);  } 

    View vi=convertView; 

     ViewHolder holder; 

    if(convertView==null){ 
     vi = inflater.inflate(R.layout.gallery_items, null); 
    holder=new ViewHolder(); 
    holder.text=(TextView)vi.findViewById(R.id.textView1); 
    holder.image=(ImageView)vi.findViewById(R.id.image);  
    vi.setTag(holder);    } 
    else  
    holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[position]); 

    final int stub_id=images[position]; 
    holder.image.setImageResource(stub_id); 
    return vi;   } 

    private int[] images = { 
     R.drawable.one_1, R.drawable.one_4, 
     R.drawable.one_2, R.drawable.one_5, 
     R.drawable.one_3     }; 

    private String[] name = { 
     "this is my car", "i love this", 
     "please hekp me", "im in park", 
     " This is nice place to visit.",   }; 


    private ImageView getImageView() { 
     setImageDimensions(); 
    ImageView i = new ImageView(mContext); 
    i.setLayoutParams(new Gallery.LayoutParams(imageWidth, imageHeight)); 
    i.setScaleType(ScaleType.CENTER_INSIDE);  return i;  } 

private void setImageDimensions() { 
     if (imageWidth == 0 || imageHeight == 0) { 
    imageWidth = AndroidUtils.convertToPix(mContext, G_ITEM_WIDTH); 
    imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT); 
     }   }  
      } 

Dies ist logcat Fehler:

04-10 02:25:13.057: E/AndroidRuntime(12302): FATAL EXCEPTION: main 
04-10 02:25:13.057: E/AndroidRuntime(12302): java.lang.NullPointerException 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.infinite.test.AndroidUtils.convertToPix(AndroidUtils.java:11) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.infinite.test.InfiniteGalleryAdapter.setImageDimensions 
(InfiniteGalleryAdapter.java:131) 
4-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.infinite.test.InfiniteGalleryAdapter.getImageView 
(InfiniteGalleryAdapter.java:117) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.infinite.test.InfiniteGalleryAdapter.getView(InfiniteGalleryAdapter.java:66) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.View.measure(View.java:8366) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.View.measure(View.java:8366) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.ViewGroup.measureChildWithMargins(viewGroup.java:3138) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.View.measure(View.java:8366) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.View.measure(View.java:8366) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.View.measure(View.java:8366) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.ViewRoot.performTraversals(ViewRoot.java:844) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.os.Handler.dispatchMessage(Handler.java:99) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.os.Looper.loop(Looper.java:123) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at java.lang.reflect.Method.invokeNative(Native Method) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at java.lang.reflect.Method.invoke (Method.java:507) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
04-10 02:25:13.057: E/AndroidRuntime(12302): 
at dalvik.system.NativeStart.main(Native Method) 
04-10 02:25:13.061: E/(129): Dumpstate > /data/log/dumpstate_app_error 
+0

Stellen Sie die Stack-Trace – 207

+0

Ja. Alle roten Linien in logcat, damit die Leute dir helfen können und sehen, welche Ausnahme ausgelöst wird und welche Zeile deines Codes die Kraft verursacht hat close – 207

+0

@ 207 bereits aktualisiert, danke –

Antwort

2

Das Problem scheint mit der Kontextvariable und Position der Bilder zu liegen. versuchen Sie den folgenden Code für Ihren Adapter:

public class InfiniteGalleryAdapter extends BaseAdapter { 
/** The width of each child image */ 
private static final int G_ITEM_WIDTH = 360; 
/** The height of each child image */ 
private static final int G_ITEM_HEIGHT = 240; 
/** The context your gallery is running in (usually the activity) */ 
private Context mContext;  
private int imageWidth;  
private int imageHeight; 
private int[] imageIds;  
public InfiniteGalleryAdapter(Context c, int[] imageIds) {  
    this.mContext = c;   
    this.imageIds = imageIds; } 
public int getCount() { 
    return Integer.MAX_VALUE; 
}  
public Object getItem(int position) { 
    return position; } 
public long getItemId(int position) { 
    return position; }  
//private Activity activity; 
private LayoutInflater inflater=null; 
public InfiniteGalleryAdapter(Context a) { 
    final int[] imageIds; 
    //activity = a; 
    this.mContext = a; 
    inflater = (LayoutInflater)mContext.getSystemService (  Context.LAYOUT_INFLATER_SERVICE); 
}   public class ViewHolder{ 
    public TextView text; 
    public ImageView image; 
}  

private int[] images = { 
     R.drawable.one_1, R.drawable.one_4, 
     R.drawable.one_2, R.drawable.one_5, 
     R.drawable.one_3    
};  
private String[] name = { 
     "this is my car", "i love this", 
     "please hekp me", "im in park",  
     " This is nice place to visit.", 
};  
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView i = getImageView(); 
    int itemPos = (position % images.length); 
    try {  

     i.setImageResource(images[itemPos]); 
     ((BitmapDrawable) i.getDrawable()).setAntiAlias(true); } 
    catch (OutOfMemoryError e) {  
     Log.e("InfiniteGalleryResourceAdapter", "Out of memory creating imageview.   Using empty view.", e); 
    }   View vi=convertView;  
    ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.gallery_items, null); 
     holder=new ViewHolder();  
     holder.text=(TextView)vi.findViewById(R.id.textView1); 
     holder.image=(ImageView)vi.findViewById(R.id.image); 
     vi.setTag(holder);  
    }  else 
     holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 
    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 
    return vi;  
} 

private ImageView getImageView() { 
    setImageDimensions(); 

    ImageView i = new ImageView(mContext); 
    i.setLayoutParams(new Gallery.LayoutParams(imageWidth, imageHeight)); 
    i.setScaleType(ScaleType.CENTER_INSIDE); 
    return i;  } 
private void setImageDimensions() { 
    if (imageWidth == 0 || imageHeight == 0) {   
     imageWidth = AndroidUtils.convertToPix(mContext, G_ITEM_WIDTH); 
     imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT); 
    }   }     } 
+1

Ich akzeptiere Ihre Antwort und upvote es Mann, wirklich danke –

+0

@AndroidStack, ich bin immer noch im Chat. Du hast herausgefunden, was ich für den Landscape-Modus gesagt habe: http: //chat.stackoverflow.com/rooms/9897/room-for-akhil-und-android-stack – Akhil

+0

@AndroidStack: mailen Sie mir auf meine Google Mail-ID, wenn Sie irgendwelche Probleme haben. tschüss – Akhil