I have implemented ViewPager
with use of android Data Binding, it is working perfect with data and click events.
I have created interface
f
Both the answer helped me and both are working, i have found another way also, however its bit lengthy.
I have taken one more Integer
variable in my list_item.xml
and setting its value from adapter.
<data>
<variable
name="position"
type="Integer"/>
</data>
and passing it in onItemClick
android:onClick="@{() -> handler.onItemClick(position)}"
then interface will look like this
public interface ItemClickListener {
public void onItemClick(int position);
}
will be setting value of position from instantiateItem()
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ListItemBinding binding = DataBindingUtil.inflate(mLayoutInflater, R.layout.list_item, container, false);
binding.setHandler(itemClickListener);
binding.setPosition(position);
binding.getRoot().setTag(position);
container.addView(binding.getRoot());
return binding.getRoot();
}
You can pass parameters in the lambda expression, like this:
android:onClick="@{() -> handler.onItemClick(rootItemView.getTag().toString())}"
And of course you'll need to edit your interface method and its implementations:
public void onItemClick(String data);
You can pass view in interface
public interface ItemClickListener {
public void onItemClick(View view);
}
Than set position in tag which you already doing
binding.getRoot().setTag(position);
And than you can get position from that view param like this
@Override
public void onItemClick(View view){
int position=(int)view.getTag();
}
For more detail info you can refer http://developers-club.com/posts/267735/