web-dev-qa-db-fra.com

Obtenir le contexte d'activité dans un adaptateur à partir d'un fragment

J'ai un Fragment avec un ListView. Dans l'adaptateur, je veux créer une boîte de dialogue.

class ViewHolder {
...
  @Override
  public void onClick(View v) {
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    ...
   }
...
}

mContext est la Context de ma Fragment, que je sauvegarde globalement lorsque l'adaptateur est créé .

unable to add window -- token null is not for an application

La méthode getActivity() n'est pas disponible alors comment obtenir la Context de ma Activity?

11
AdrianoCelentano

Lorsque vous créez votre adaptateur, que passez-vous en contexte? Essayez de passer this si vous ne le faites pas. Un peu plus de code serait utile aussi.

15
Michał Z.

Si vous avez un adaptateur personnalisé, changez le constructeur pour exiger Context en tant que paramètre. 

public CustomAdapter(Context context, List<Item> items) {   
}

Créez ensuite une variable d’instance pour stocker le contexte via le constructeur. 

private Context mContext; //instance variable

public CustomAdapter(Context context, List<Item> items) {
    //some code
    this.mContext= context;
}

Et maintenant, vous pouvez utiliser la variable mContext de n’importe où dans votre adaptateur. 

Pour créer l'adaptateur, passez simplement 'this' si créé à partir d'une activité ou getActivity() s'il est créé à partir d'un fragment. 

mAdapter = new CustomAdapter(this, mArrayItems);

J'espère que cela pourra aider. 

26
daniel_c05

Sur la liste de mes adaptateurs

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.custom_list_view, null);
        holder = new ViewHolder();
        holder.lsNama = convertView.findViewById(R.id.lsNama);
        holder.lsUid = convertView.findViewById(R.id.idPartner);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.lsUid.setText(listData.get(position).getUid());
    holder.lsNama.setText(listData.get(position).getNama());

    holder.lsNama.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String uid = listData.get(position).getUid().toString();
            String nama =  listData.get(position).getUid().toString();
            Intent intent = new Intent(view.getContext(), MapsActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("bUid",uid);
            intent.putExtras(bundle);
            view.getContext().startActivity(intent);
        }
    });

    return convertView;
}
0
Bachtiar Panjaitan
class ViewHolder {
...
  @Override
  public void onClick(View v) {
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
    ...
   }
...
}
0
izak