2013-07-15 2 views
2

У меня есть ListView внутри LinearLayout с именем listView1, а для определенной строки у меня есть LinearLayout, внутри которого есть com.facebook.widget.ProfilePictureViewer и TextView. Я создал CustomListAdapter для заполнения списка. Я устанавливаю адаптер из Request.executeMyFriendsRequestAsync().NullPointerException в CustomListAdapter при установке адаптера из фрагмента

Я отправляю это после исследования в нескольких похожих сообщениях в stackoverflow, а также в других учебниках. Пожалуйста, помогите, я застрял на этом с последнего 1 дня.

list_item.xml

<com.facebook.widget.ProfilePictureView 
    android:padding="2dp" 
    android:id="@+id/friendProfilePicture" 
    android:layout_width="43dp" 
    android:layout_height="44dp" > 
</com.facebook.widget.ProfilePictureView> 
<TextView 
    android:id="@+id/tv_friendName" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:paddingLeft="2dp" 
    android:text="Name"/> 

Я думаю, что я либо настройки адаптера неправильно или есть что-то несоответствие в конструкторе адаптера.

MyAdapter.java

public class MyAdapter extends ArrayAdapter<String> { 

private final Context context; 
private String[] names; 
private String[] ids; 

public MyAdapter(Context context, int layoutResourceId, String[] n, String[]i) { 
    super(context, R.layout.list_item, n); 
    this.context = context; 
    names = n; 
    ids = i; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View vi = inflater.inflate(R.layout.list_item, parent, false); 
    TextView tvName = (TextView) vi.findViewById(R.id.tv_friendName); 
    ProfilePictureView profilePic = (ProfilePictureView) vi.findViewById(R.id.profilepic); 
    tvName.setText(names[position]); 
    profilePic.setProfileId(ids[position]); 
    return vi; 
} 
} 

и вот код, где я устанавливаю адаптер,

public class MainFragment extends Fragment { 

и заявление для установки адаптера

context = MainActivity.context; 

listView.setAdapter(new MyAdapter(context,R.layout.list_item, names, id)); 

Там представляет собой статический переменный контекст типа Context в MainActivty.java,

имена и идентификаторы - это два массива String, которые имеют значения и не равны нулю.

Вот StackTrace

07-15 07:02:07.729: E/AndroidRuntime(3367): FATAL EXCEPTION: main 
07-15 07:02:07.729: E/AndroidRuntime(3367): java.lang.NullPointerException 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.widget.ArrayAdapter.init(ArrayAdapter.java:310) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at azeem.anas.facebookloginbutton.MyAdapter.<init>(MyAdapter.java:19) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at azeem.anas.facebookloginbutton.MainFragment$3.onCompleted(MainFragment.java:103) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at com.facebook.Request$2.onCompleted(Request.java:285) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at com.facebook.Request$4.run(Request.java:1240) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.os.Handler.handleCallback(Handler.java:725) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.os.Looper.loop(Looper.java:137) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-15 07:02:07.729: E/AndroidRuntime(3367):  at dalvik.system.NativeStart.main(Native Method) 

Любая помощь будет принята с благодарностью.

+0

изменения 'супер (контекст, R.layout.list_item, п),' 'с супер (context, android.R.id.text1, n); 'и посмотреть, не имеет ли значения – Blackbelt

+0

отладка и проверить, является ли значение' vi' пустым – vilpe89

+0

@blackbelt: его изменение ничего не делало. :-( –

ответ

1

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

ProfilePictureView profilePic = (ProfilePictureView) vi.findViewById(R.id.profilepic);,

Я имел в виду неправильный ресурс. Это было на самом деле

ProfilePictureView profilePic = (ProfilePictureView) vi.findViewById(R.id.friendProfilePicture);


Спасибо всем тем, кто прилагает усилия в решении моей проблемы

0
public class MyAdapter extends ArrayAdapter<String> { 
    private String[] ids; 

    public MyAdapter(Context context, int layoutResourceId, String[] n, String[] i) { 
     super(context, R.layout.list_item, n); 
     this.ids = i; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(layoutResourceId, null); 
     } 
     TextView tvName = (TextView) view.findViewById(R.id.tv_friendName); 
     ProfilePictureView profilePic = (ProfilePictureView) view.findViewById(R.id.profilepic); 
     tvName.setText(getItem(position)); 
     profilePic.setProfileId(ids[position]); 
     return view; 
    } 
} 

Попробуйте это, он должен работать. И держать context = getActivity();

Важно: вызвать listView.setAdapter(new MyAdapter(context,R.layout.list_item, names, id)); в onActivityCreateed()

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