Ich habe eine Fragment
mit einer ListView
. Im Adapter möchte ich einen Dialog anlegen.
class ViewHolder {
...
@Override
public void onClick(View v) {
...
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
...
}
...
}
mContext
ist das Context
von meinem Fragment
, das ich beim Erstellen des Adapters global speichere . Ich erhalte den Fehler.
unable to add window -- token null is not for an application
Die Methode getActivity()
ist nicht verfügbar. Wie kann ich das Context
meines Activity
abrufen?
Wenn Sie Ihren Adapter erstellen, was übergeben Sie als Kontext? Versuchen Sie, this
zu übergeben, wenn Sie es nicht tun. Ein bisschen mehr Code wäre auch hilfreich.
Wenn Sie über einen benutzerdefinierten Adapter verfügen, ändern Sie den Konstruktor so, dass Context
als Parameter erforderlich ist.
public CustomAdapter(Context context, List<Item> items) {
}
Erstellen Sie dann eine Instanzvariable, um den Kontext über den Konstruktor zu speichern.
private Context mContext; //instance variable
public CustomAdapter(Context context, List<Item> items) {
//some code
this.mContext= context;
}
Jetzt können Sie die Variable mContext
von überall in Ihrem Adapter verwenden.
Um den Adapter zu erstellen, übergeben Sie einfach 'this', wenn Sie aus einer Aktivität erstellt werden, oder getActivity()
, wenn Sie aus einem Fragment erstellt werden.
mAdapter = new CustomAdapter(this, mArrayItems);
Hoffentlich hilft das.
Auf meiner Adapterliste
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());
...
}
...
}