2014-10-29 4 views
-2

То, что я2 различных макетов в ListView

У меня есть панель навигации ListView Whos настраивается. 1-я строка имеет просмотр изображений, а другие строки имеют текстовое представление. Мой код для его адаптера таков:

public class drawer_list_adapter extends BaseAdapter { 

Context context; 
String[] nv_items; 
int[] pro_pic; 
LayoutInflater layoutInflater; 

public drawer_list_adapter(Context context, String[] nv_items) { 
    this.context = context; 
    this.nv_items = nv_items; 
    this.layoutInflater = LayoutInflater.from(context); 
} 

@Override 
public int getCount() { 
    return 4; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public int getViewTypeCount() { 
    return 4; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder dLI; 

    if (convertView == null) { 
     if (getItemViewType(position) == 0){ 
      convertView = layoutInflater.inflate(R.layout.drawer_pro_pic, parent, false); 
      dLI = new ViewHolder(); 
      convertView.setTag(dLI); 
     } 
     else { 
      convertView = layoutInflater.inflate(R.layout.drawer_list_item, parent, false); 
      dLI = new ViewHolder(); 
      convertView.setTag(dLI); 
      dLI.items = (TextView) convertView.findViewById(R.id.drawer_list_text); 
      dLI.items.setText(nv_items[position]); 
     } 
    } 
    else { 
     dLI = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 

public class ViewHolder { 
    TextView items; 
    } 
} 

Все работает отлично до этого.

Теперь я хочу изменить изображение в этом списке. Пользователь может выбрать изображение из галереи. Мой код, который находится ниже:

private class DrawerItemClickListener implements AdapterView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 

     if (position == 0){ 
      Intent pickFromGallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
      startActivityForResult(pickFromGallery, OpenGallery); 
     } 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == OpenGallery && resultCode == RESULT_OK){ 
      Uri pickedImage = data.getData(); 
      String[] filePath = {MediaStore.Images.Media.DATA}; 
      Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
      cursor.moveToFirst(); 
      String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 
      pro_pic_selected.setImageBitmap(BitmapFactory.decodeFile(imagePath)); 
      cursor.close(); 
     } 
    } 

я нажимаю на первом ряду, галерея открывает, но когда я выбрать изображение, я получаю следующее сообщение об ошибке: метод

Process: com.hirak.assistere_doit, PID: 14010 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hirak.assistere_doit/com.hirak.assistere_doit.do_it_main_screen}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5001) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at com.hirak.assistere_doit.do_it_main_screen.onCreate(do_it_main_screen.java:54) 
     at android.app.Activity.performCreate(Activity.java:5231) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5001) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 

Мой OnCreate()

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_do_it_main_screen); 

    addTask = (Button) findViewById(R.id.addTask); 
    addNote = (Button) findViewById(R.id.addNote); 
    addNote.setOnClickListener(this); 
    addTask.setOnClickListener(this); 

    final ActionBar actionBar = getActionBar(); 
    actionBar.setHomeButtonEnabled(true); 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    drawerLayout = (DrawerLayout) findViewById(R.id.NvDrawer); 
    drawerList = (ListView) findViewById(R.id.drawer_list); 
    drawer_list_adapter drawerListAdapter = new drawer_list_adapter(this, nv_items); 
    drawerList.setAdapter(drawerListAdapter); 
    drawerList.setOnItemClickListener(new DrawerItemClickListener()); 



    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 
      R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close); 

    drawerLayout.setDrawerListener(drawerToggle); 
} 

Любая помощь будет оценена по достоинству. Спасибо

+0

* by_the_way, соглашения об именах помогли бы *, в любом случае, это номер строки 54 в do_it_main_screen.java – user2450263

+0

pro_pic_selected = (ImageView) findViewById (R.id.imageView); pro_pic_selected.setImageResource (R.drawable.cake); вот этот. игнорировать этот bcoz я сделал это просто, чтобы увидеть, если он работает, когда я выбираю изображение из моего drawable. –

+0

без этого кода, здесь приходит ошибка pro_pic_selected.setImageBitmap (BitmapFactory.decodeFile (imagePath)); –

ответ

0

Вы должны инициализировать ImageView pro_pic_selected внутри метода onCreate(). т. е. вам нужно поставить эту строку pro_pic_selected = (ImageView) findViewById(R.id.imageView); внутри onCreate(). Если вы хотите использовать этот вид в любом месте класса, вы можете объявить его в области класса внутри своего класса do_it_main_screen. Кроме того, убедитесь, что в вашем макете есть ImageView с ID imageView R.layout.activity_do_it_main_screen, иначе findViewById вернет значение null.

Смежные вопросы