web-dev-qa-db-ja.com

フラグメントからアダプタのアクティビティコンテキストを取得する

FragmentListViewがあります。アダプターで、ダイアログを作成します。

_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()は使用できないため、ContextActivityを取得する方法は?

13

アダプターを作成するときに、コンテキストとして何を渡しますか?しない場合は、thisを渡してください。さらにいくつかのコードも役に立ちます。

15
Michał Z.

カスタムアダプターがある場合は、コンストラクターを変更して、パラメーターとして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);
_

お役に立てば幸いです。

26
daniel_c05

私のアダプターのリストビューで

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