2013-06-05 57 views
0

我有一些問題試圖創建一個ImageAdapter。坦率地說,我不確定我是否以最好的方式開展工作。我在我的/assets文件夾中有20個圖像。我有一列String格式的文件名。我只想在我的一個對話框條目中創建一個下拉列表(Spinner),供人們選擇其中一個圖像(不是通過名稱,而是通過實際圖像)。我已經提供了所有與我正在嘗試做的事情有關的代碼。任何幫助將不勝感激。稍後,我需要知道爲哪個圖像選擇了不同的ListAdapter我必須顯示這些數據。NullPointerException當試圖創建ImageAdapter

編輯:修正了第一個錯誤。正在使用錯誤的findViewById。它現在崩潰時,我嘗試按下下拉。我沒那麼熟悉ArrayAdapter logcat的下面

package cs.ucsb.cs185.dimberman.lifeRPG; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.net.Uri; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 

public class ImageAdapter extends ArrayAdapter<String> { 
    int layoutResourceId; 
    public static final String CONTENT_URI = "content://cs.ucsb.cs185.dimberman.lifeRPG.assets."; 

    public ImageAdapter(Context context, int layoutResourceId, String[] icons) { 
     super(context, layoutResourceId, icons); 
     this.layoutResourceId = layoutResourceId; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ItemHolder holder = null; 

     if(row == null) { 
      LayoutInflater inflater = ((Activity)parent.getContext()).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new ItemHolder(); 
      holder.image = (ImageView)row.findViewById(R.id.list_image); 
      row.setTag(holder); 
     } else { 
      holder = (ItemHolder)row.getTag(); 
     } 

     final String s = getItem(position); 
     holder.image.setImageURI(Uri.parse(CONTENT_URI + s)); 
     return row; 
    } 

    static class ItemHolder{ 
     ImageView image; 
    } 
} 

對話框生成

private String [] icons = { 
    "airplane.png", "bang.png", "drive_copy.png", "email.png", "heart.png", "kingOfWorld.png", 
    "leafy_outdoors.png", "miscellaneous_blob.png", "music.png", "outdoors.png", "paperclip.png", 
    "pencil.png", "person.png", "pet.png", "radioactive.png", "shop.png", "star.png", "talk.png", 
    "telephone.png", "thumbtack.png" 
}; 

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
alert.setTitle(R.string.add_activity); 

final View v2 = this.getLayoutInflater().inflate(R.layout.add_button_layout, null); 

ImageAdapter adapter2 = new ImageAdapter(this, R.layout.image_drop_down_view, icons); 

Spinner imageList = (Spinner) findViewById(R.id.addActivityImageText); 
imageList.setAdapter(adapter2); 
// ... 

XML的簡單圖像項

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/list_image" 
     android:layout_width="50dip" 
     android:layout_height="50dip" 
     android:contentDescription="" 
     /> 


</LinearLayout> 

XML警報生成器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="6dp" > 

    <LinearLayout 
     android:id="@+id/row0ForDialog" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:weightSum="16"> 

     <TextView 
       android:id="@+id/addActivityImageLabel" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:paddingTop="8dp" 
       android:paddingLeft="8dp" 
       android:text="@string/add_activity_image" 
       android:gravity="left" 
       android:layout_weight="5" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <Spinner 
      android:id ="@+id/addActivityImageText" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:paddingTop="8dp" 
      android:paddingRight="8dp" 
      android:layout_weight="11" 
      android:inputType="text" /> 

    </LinearLayout> 
</LinearLayout> 

logcat的緊急

06-05 17:21:27.346: E/AndroidRuntime(1843): FATAL EXCEPTION: main 
06-05 17:21:27.346: E/AndroidRuntime(1843): java.lang.IllegalStateException: Could not execute method of the activity 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.view.View$1.onClick(View.java:3597) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.view.View.performClick(View.java:4202) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.view.View$PerformClick.run(View.java:17340) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.os.Handler.handleCallback(Handler.java:725) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.os.Looper.loop(Looper.java:137) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at dalvik.system.NativeStart.main(Native Method) 
06-05 17:21:27.346: E/AndroidRuntime(1843): Caused by: java.lang.reflect.InvocationTargetException 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at android.view.View$1.onClick(View.java:3592) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  ... 11 more 
06-05 17:21:27.346: E/AndroidRuntime(1843): Caused by: java.lang.NullPointerException 
06-05 17:21:27.346: E/AndroidRuntime(1843):  at cs.ucsb.cs185.dimberman.lifeRPG.LifeRpgMain.listAdd(LifeRpgMain.java:159) 
06-05 17:21:27.346: E/AndroidRuntime(1843):  ... 14 more 
06-05 17:26:27.660: E/Trace(1875): error opening trace file: No such file or directory (2) 

編輯:logcat中的第二個bug

06-05 17:35:35.719: E/AndroidRuntime(1949): FATAL EXCEPTION: main 
06-05 17:35:35.719: E/AndroidRuntime(1949): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:737) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:733) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.Spinner.measureContentWidth(Spinner.java:681) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.Spinner$DropdownPopup.show(Spinner.java:959) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.Spinner.performClick(Spinner.java:609) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.view.View$PerformClick.run(View.java:17340) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.os.Handler.handleCallback(Handler.java:725) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.os.Looper.loop(Looper.java:137) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at dalvik.system.NativeStart.main(Native Method) 
06-05 17:35:35.719: E/AndroidRuntime(1949): Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView 
06-05 17:35:35.719: E/AndroidRuntime(1949):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379) 
06-05 17:35:35.719: E/AndroidRuntime(1949):  ... 16 more 
+0

郵政logcat的 – codeMagic

+0

你在哪裏創建' icons'?它在創建適配器時被引用。 –

+0

@codeMagic新增 – MasterGberry

回答

0

如果微調是內部DialogBox佈局(在add_button_layout)對其進行初始化爲:

Spinner imageList = (Spinner)v2. findViewById(R.id.addActivityImageText); 
+0

好的。有點進一步,哎呀忘記使用v2。現在,當我嘗試點擊Spinner時它崩潰了。我將發佈新的logcat。 – MasterGberry

+0

@MasterGberry:好的,然後顯示微調onClick監聽器代碼來獲得更多的幫助 –

+0

我還沒有一個。也許這就是問題xD – MasterGberry