Если вы хотите знать размер без декодирования, я считаю, что следующие работы:
$size = (int) (strlen(rtrim($data, '=')) * 3 / 4);
Или:
$size = (strlen($data) * 3 / 4) - substr_count(substr($data, -2), '=');
В противном случае просто используйте strlen()
на декодированные данные, как указано в Marc.
Вам необходим интерфейс , передаваемый в качестве параметра при создании адаптера .
Пример:
class Adapter(private val actions: Actions) : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
// Create ViewHolder
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
// Setup Binder
holder.readMoreButton.setOnClickListener(View.OnClickListener {
if (userIsSubscribed) {
actions.launchActivity() //Launch the next Activity
} else {
//Show the subscribe layout
holder.rlSubscribeToView.setVisibility(View.VISIBLE)
actions.hideRecylerView() //Then hide the entire recyclerView
}
})
}
}
internal interface Actions {
fun launchActivity()
fun hideRecylerView()
}
Из небольшого исследования можно получить 2 обратных вызова, которые могут дать вам ссылку на реальный RecyclerView, методы onAttachedToRecyclerView и onDetachedFromRecycler . Я предполагаю, что вы вызываете конструктор адаптера и передаете в контексте. Если это так, используйте приведенный ниже код, он даст желаемый результат.
RelativeLayout rlSubscribeToView;
RecyclerView recyclerView;
public RecyclerAdapter(Context context) {
this.context = context;
this.videoItems = videoItems;
rlSubscribeToView = ((Activity) context).findViewById(R.id.rlSubscribeToView);
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
this.recyclerView = recyclerView;
}
и в вашем onBindViewHolder
вы теперь можете получить доступ к макету подписки
public void onBindViewHolder(@NonNull final ReadViewholder, final int position) {
...
rlSubscribeToView.setVisibility();
}