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
?
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.
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.
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;
}
class ViewHolder {
...
@Override
public void onClick(View v) {
...
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
...
}
...
}