У меня внутри есть ActivityCheckout.java
переходник AdapterServiceCourier
. Класс адаптера предназначен для отображения переключателя
цена. Как я могу обновить textview
с помощью представления, которое находится в ActivityCheckout.
нравиться
public TextView getTextViewPriceOngkir()
{
TextView txtView = (TextView)findViewById(R.id.price_ongkir);
return txtView;
}
когда я использовал в адаптере AdapterServiceCourier
:
ActivityCheckout ac = new ActivityCheckout();
TextView tv = ac.getTextViewPriceOngkir();
tv.setText("8");
его ошибка вроде:
E/UncaughtException: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class <unknown>
AdapterServiceCourier.java:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
SharedPreferences sharedPreferences = context.getSharedPreferences(AppConfig.APP_PUPUKKUJANG_MART, Context.MODE_PRIVATE);
final String whois = sharedPreferences.getString(AppConfig.USER_WHOIS,null);
row_index = -1;
holder.itemView.setTag(service.get(position));
final ServiceCourier p = service.get(position);
holder.service.setText(p.getService());
holder.desc.setText(p.getDescription());
holder.cost.setText(p.getCost());
holder.etd.setText(p.getEtd());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
View.OnClickListener rbClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton checked_rb = (RadioButton) v;
if (lastCheckedRB != null){
lastCheckedRB.setChecked(false);
}
lastCheckedRB = checked_rb;
SharedPreferences sharedPreferences = context.getSharedPreferences(AppConfig.APP_PUPUKKUJANG_MART, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("ongkir_service", p.getService());
editor.putString("ongkir_description", p.getDescription());
editor.putString("ongkir_cost", p.getCost());
editor.putString("ongkir_etd", p.getEtd());
editor.apply();
ActivityCheckout ac = new ActivityCheckout();
TextView tv = ac.getTextViewPriceOngkir();
tv.setText("8");
}
};
holder.radiobutton.setOnClickListener(rbClick);
}
Отображать: изображение щелкните переключатель, цена должна быть установлена на уровне онгкир введите описание изображения здесь
Ошибка отсутствует в коде, ошибка в основном в файле xml
ActivityCheckout ac = new ActivityCheckout();
Вы устанавливаете текст в класс TextView, который не прикреплен к вашему XML-макету.
Вы не можете создать новое действие, подобное этому, ОС создаст каждое действие. вы должны передать ссылку на свою активность адаптеру и поместить текст в это текстовое представление
укажите, что когда вы хотите обновить textView, я имею в виду, когда выбран переключатель
@Ashvinsolanki обновляю вопрос
@this, где вы инициализировали адаптер, я имею в виду при проверке активности?
@Ashvinsolanki да, я инициализирую адаптер в проверке активности
@willy и textView, которые вы хотите обновить, находятся в этом действии
@Ashvinsolanki Да, конечно
хорошо, я отправлю ответ
YourAdapter instance = new YourAdapter (context, arrayList, textView);
Теперь в конструкторе адаптера вы можете получить доступ к этому текстовому окну.
YourAdpater.java
TextView textView;
YourAdapter(Context context,Arraylist<ModelClass> arraylist,TextView textView)
{
this.textView = textView;
}
Теперь в адаптере вы можете обновлять значения textview.
это наблюдаемый шаблон проектирования:
ваша деятельность должна реализовывать интерфейс Observer
ваш адаптер должен расширять класс Observable
вы должны добавить свою активность в свой адаптер
с помощью метода notiftyObserver
вы можете обновить свою активность
обратите внимание, что с помощью этот шаблон дизайна вы можете уведомлять о нескольких действиях.
В вашем классе адаптера OnClick RadioButton
View.OnClickListener rbClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton checked_rb = (RadioButton) v;
if (lastCheckedRB != null){
lastCheckedRB.setChecked(false);
}
.....
.....
//Create Statis Mathod in ActivityCheckout and Access Hear
ActivityCheckout.updateTextView(String DataUWantToAdd);
}
};
И в классе Yout ActivityCheckout
добавить статический метод Не пропустите это
class ActivityCheckout
{
.....
//on create and etc
public static void updateTextView(String DataUWantToUpadate)
{
yourTextViewObject.setText(DataUWantToUpdate);
}
}
Вы можете получить доступ к методу Activity в адаптере с помощью context. Создайте один метод со строковым параметром в Activity, который устанавливает строку для вашего текстового представления и вызывает этот метод в вашем адаптере, когда вы хотите изменить текст.
прикрепите свой xml-файл.