带有数据绑定的ViewPager项的位置

时间:2016-09-13 06:00:13

标签: android data-binding android-databinding

我已经使用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调用了我的方法如何传递位置?

3 个答案:

答案 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();
}