Actualmente tengo 3 fragmentos, pero no soy capaz de conseguir mi adaptador de trabajo.
Cuando estoy llamando lv.setAdapter(lbadapter) devuelve un nullpointer excepción.
¿Cuál podría ser el problema ?

Gracias de antemano

He aquí 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 leadlist.xml archivo :

<?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;
}
}
InformationsquelleAutor David | 2014-02-15

3 Comentarios

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

    En lugar de hacer esto. Desde la vista de lista no está directamente relacionada con su Activity. Es el que encierra a la vista en el interior del fragmento, que es la celebración de la ListView

    lv = (ListView) rootView.findViewById(android.R.id.list);
    • Gracias funciona. Por el camino un poco otra pregunta, ¿se necesita una nueva presentación para cada fragmento o es un diseño bastante?
    • Que se basa en lo que usted necesita para mostrar el interior del fragmento.
    • Uno va a funcionar bien si usted necesita la misma interfaz de usuario en cada fragmento.
    • Sí, en ese caso se puede utilizar el mismo fragmento de sí mismo
  2. 1

    Puede ser que usted tiene que hacer como que

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

    lugar de

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

    Suponiendo que la lista está en el fragmento.

    • La respuesta está ya publicada por mí.
    • Sí, puede ser que donde hacerlo mismo tiempo…
    • Si usted toma una mirada en el tiempo diff puede enangostar abajo de este.
  3. 0

    El problema radica en la forma en que se han inicializado su ListView. Si usted nota que pertenece a su leadlist.xml archivo. Sin embargo, durante la inicialización de la que está 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,

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

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

Dejar respuesta

Please enter your comment!
Please enter your name here