我已经使用android数据绑定实现了Custom Table
View Cell
,它可以很好地处理数据和点击事件。
我为点击事件
创建了ViewPager
interface
以下是我public interface ItemClickListener {
public void onItemClick();
}
的{{1}}
instantiateItem()
我在适配器构造函数中发送PagerAdapter
。
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ListItemBinding binding = DataBindingUtil.inflate(mLayoutInflater, R.layout.list_item, container, false);
binding.setHandler(itemClickListener);
binding.getRoot().setTag(position);
container.addView(binding.getRoot());
return binding.getRoot();
}
这是我的itemClickListener
public MatchListAdapter(Context context, ItemClickListener itemClickListener) {
mContext = context;
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.itemClickListener= itemClickListener;
}
现在问题是我想传递点击项目的位置,如何从xml传递该位置?因为我已经从xml调用了我的方法如何传递位置?
答案 0 :(得分:5)
您可以在界面
中传递视图 public interface ItemClickListener {
public void onItemClick(View view);
}
比在你已经做的标签中设置位置
binding.getRoot().setTag(position);
而且你可以从这个视图中获得这样的位置
@Override
public void onItemClick(View view){
int position=(int)view.getTag();
}
有关详细信息,请参阅http://developers-club.com/posts/267735/
答案 1 :(得分:2)
您可以在lambda表达式中传递参数,如下所示:
android:onClick="@{() -> handler.onItemClick(rootItemView.getTag().toString())}"
当然,您需要编辑您的界面方法及其实现:
public void onItemClick(String data);
答案 2 :(得分:2)
这两个答案对我有帮助,两者都有效,我也找到了另一种方法,但它有点冗长。
我在Integer
中再添加一个list_item.xml
变量,并从适配器设置其值。
<data>
<variable
name="position"
type="Integer"/>
</data>
并将其传递到onItemClick
android:onClick="@{() -> handler.onItemClick(position)}"
然后界面将如下所示
public interface ItemClickListener {
public void onItemClick(int position);
}
将设置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();
}