Fragment
とListView
があります。アダプターで、ダイアログを作成します。
_class ViewHolder {
...
@Override
public void onClick(View v) {
...
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
...
}
...
}
_
mContext
は、Context
からのFragment
で、アダプターの作成時にグローバルに保存します。エラーが発生します。
_unable to add window -- token null is not for an application
_
メソッドgetActivity()
は使用できないため、Context
のActivity
を取得する方法は?
アダプターを作成するときに、コンテキストとして何を渡しますか?しない場合は、this
を渡してください。さらにいくつかのコードも役に立ちます。
カスタムアダプターがある場合は、コンストラクターを変更して、パラメーターとしてContext
を要求します。
_public CustomAdapter(Context context, List<Item> items) {
}
_
次に、インスタンス変数を作成して、コンストラクターを介してコンテキストを格納します。
_private Context mContext; //instance variable
public CustomAdapter(Context context, List<Item> items) {
//some code
this.mContext= context;
}
_
これで、アダプターのどこからでも変数mContext
を使用できます。
アダプタを作成するには、アクティビティから作成された場合は「this」を、フラグメントから作成された場合はgetActivity()
を渡します。
_mAdapter = new CustomAdapter(this, mArrayItems);
_
お役に立てば幸いです。
私のアダプターのリストビューで
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());
...
}
...
}