Как правильно реализовать пользовательские адаптеры?

Woppi спросил: 27 ноября 2017 в 06:10 в: android

Я пытаюсь правильно обдумать реализацию адаптеров и хотел бы знать ff:

  1. Можно ли передавать контекст активности адаптеру? Я где-то читал, что это плохая практика - пропускать контекст деятельности и находить его запутанным.

  1. При получении родительского представления, например, для использования в SnackBar и т. д., создается его экземпляр с помощью конструктора, подобного этому this.mRootView = ((Activity)mContext).getWindow().getDecorView().findViewById(R.id.activity_country_search);` правильный путь или его следует создать в onCreateViewHolder и использовать параметр View parent следующим образом:

`` `

@Override
public CountryIssuingViewHolder onCreateViewHolder(ViewGroup parent) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_country_search_issuing_row, parent, false);    this.mRootView = parent.findViewById(R.id.activity_country_search);
    return new CountryIssuingViewHolder(v, true);
}


  1. Можно ли внедрить снэкбар в адаптер или мне следует использовать eventbus и показать его с помощью активности?

Текущая реализация адаптера:

Activity

adapter = new CountryIssuingListAdapter(this, countryIssuingList, new 
CountryPhoneCodeAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(Country item, View v) {
            Gson gson = new Gson();
            Intent intent = new Intent();
            intent.putExtra("COUNTRY", gson.toJson(item));
            setResult(RESULT_OK, intent);
            finish();
        }
    });

Adapter

public CountryIssuingListAdapter(Context mContext, ArrayList<Country> itemArrayList, CountryPhoneCodeAdapter.OnItemClickListener listener) {
    this.countryArrayList = itemArrayList;
    this.countryArrayListForSearch = new ArrayList<>();
    this.countryArrayListForSearch.addAll(itemArrayList);
    this.mContext = mContext;
    this.TAG = mContext.getClass().getSimpleName();
    this.mRootView = ((Activity)mContext).getWindow().getDecorView().findViewById(R.id.activity_country_search);
    this.listener = listener;
}

Большое спасибо.

0 ответов