android listview nullpointerexception fragment adapter

android - Listview establece el fragmento del adaptador nullpointerexception



adapter (3)

El problema radica en la forma en que ha inicializado su ListView. Si nota que pertenece a su archivo leadlist.xml. Sin embargo, al inicializar estás llamando,

lv = (ListView) this.getActivity().findViewById(android.R.id.list); // this means your listView lv belongs to your MainActivity which actually doesn''t.

Cambiar esto a,

lv = (ListView) rootView.findViewById(android.R.id.list);

y debería funcionar Déjame cómo va. Feliz codificación :)

Actualmente tengo 3 fragmentos pero no puedo hacer funcionar mi adaptador. Cuando invoco lv.setAdapter (lbadapter), devuelve una excepción nullpointer. Cual podría ser el problema ?

Gracias por adelantado

Aquí hay una parte de mi fragmento:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView; rootView = inflater.inflate(R.layout.leadlist, container, false); profielen = new ArrayList<Profile>(); new getLeaderboards().execute(url); lv = (ListView) this.getActivity().findViewById(android.R.id.list); lbadapter = new LeaderBoardAdapter(this.getActivity(), R.layout.item_layout, profielen); return rootView; } public static class getLeaderboards extends AsyncTask<String, Void, JsonObject> { @Override protected JsonObject doInBackground(String... urls) { JsonObject x = parseURL.GetJSON(urls[0]); return x; } @Override protected void onPostExecute(JsonObject obj) { Gson gson = new Gson(); JsonArray arr = obj.get("rows").getAsJsonArray(); for (JsonElement el : arr) { Profile pat = gson.fromJson( el , Profile.class); profielen.add(pat); } lv.setAdapter(lbadapter); } }

Aquí está mi archivo leadlist.xml:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:divider="@null" android:dividerHeight="20dp" > </ListView> </RelativeLayout>

Mi adaptador:

public class LeaderBoardAdapter extends ArrayAdapter<Profile>{ LayoutInflater vi; List<Profile> profielen; Context mContext; int res; public LeaderBoardAdapter(Context context, int resource, List<Profile> objects) { super(context, resource, objects); this.res = resource; this.profielen = objects; mContext = context; vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ProfileHolder holder = null; if(convertView == null) { LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); convertView = vi.inflate(R.layout.item_layout, parent, false); convertView = inflater.inflate(res, parent, false); holder = new ProfileHolder(); holder.name = (TextView)convertView.findViewById(R.id.nameChar); holder.pic = (ImageView)convertView.findViewById(R.id.imageChar); holder.rank = (TextView)convertView.findViewById(R.id.ratingNumber); convertView.setTag(holder); } else { holder = (ProfileHolder)convertView.getTag(); } Profile p = profielen.get(position); holder.name.setText(p.getName()); holder.rank.setText(p.getRanking()); return convertView; } public static class ProfileHolder{ TextView name; ImageView pic; TextView rank; } }


Puede ser que necesites hacer eso

lv = (ListView) rootView.findViewById(android.R.id.list);

en lugar de

lv = (ListView) this.getActivity().findViewById(android.R.id.list);

Suponiendo que la vista de lista está en el fragmento.


lv = (ListView) this.getActivity().findViewById(android.R.id.list);

En cambio haz esto. Dado que la vista de lista no está directamente relacionada con su Activity . Es la vista adjunta dentro del fragmento que contiene el ListView

lv = (ListView) rootView.findViewById(android.R.id.list);