2016-08-09 2 views
0

У меня есть класс адаптера, который расширяет recyclerview.adapter, и мне нужно использовать следующий код в этом классе, но он имеет ошибку в «этом».Как использовать getcontext() в классе адаптера recycler?

public void addItems(int howMany){ 
    if (howMany > 0) { 
     int lastInsertedIndex = 11; 
     for (int i = lastInsertedIndex + 1; i <= lastInsertedIndex + howMany; i++) { 
      mList.add(PreferenceManager.getDefaultSharedPreferences(this).getString("Item " + i)); 
      notifyItemInserted(mList.size() - 1); 
     } 
     lastInsertedIndex = lastInsertedIndex + howMany; 
    } 
} 

как исправить эту ошибку?

+1

вы должны передать контекст деятельности при вызове адаптера, прежде чем установить в recyclerview. – KrishnaJ

+0

@ KrishnaJ как это сделать? – Amix

ответ

0

Пропустите контекст в конструкторе адаптера, как:

Context context; 
public YourAdapter(Context c) { 
    this.context = c; 
} 

Теперь используйте этот контекст вместо этого.

Чтобы передать контекст:

mAdapter = new YourAdapter(getContext()); 
recyclerview.setAdapter(mAdapter); 

Если вы используете адаптер от активности затем использовать ActivityName.this вместо getContext().

0

В деятельности Вы должны сделать так:

активность

mAdapter = new CardViewDataAdapter(bank_list, context); 
    recyclerView.setAdapter(mAdapter); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

I переходником Вы можете получить так:

адаптер

public CardViewDataAdapter(ArrayList<Bank> bank_list, Context context) { 
    dataSet = bank_list; 
    ctx = context; 
} 
+0

context = getApplicationContext(); – KrishnaJ

+0

Если он работает, тогда примите ответ. – KrishnaJ

1

В вашем ресайклере класса адаптера

private Context context; 
//some code...// 

@Override 
    public CartListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     context=parent.getContext(); //here get the context 
     View cartItemRow= LayoutInflater.from(parent.getContext()).inflate(R.layout.cartitem_row_detail,parent,false); 
     return new CartListViewHolder(cartItemRow); 
    } 

использовать его на протяжении всего класса адаптера ... нет необходимости передавать контекст или что-нибудь ..