我给视图充气,设置它的ID,设置一些标签,在其上设置onClickListener并将其添加到父视图中。
LinearLayout llCategoryListIncome = (LinearLayout)calculatorFlipContainerBack.findViewById(R.id.ll_category_list_income);
// inflate category item
LinearLayout categoryItem = (LinearLayout)inflater.inflate(
R.layout.fragment_category_item,
container,
false);
Integer id = 2;
Integer position = 3;
categoryItem.setId(position);
categoryItem.setTag(R.string.tag_category_position, position);
categoryItem.setTag(R.string.tag_category_id, id);
categoryItem.setOnClickListener(this);
llCategoryListIncome.addView(categoryItem);
在onClick Listener中,我想检查此ID。但ID总是-1。与标签相同的问题。标签始终为空。
public void onClick(View v) {
Integer position = (Integer)view.getTag(R.string.tag_category_position);
Integer id = (Integer)view.getTag(R.string.tag_category_id);
Log.d(TAG, "view get id " + view.getId()); // is null
Log.d(TAG, "position is " + position); // is null
Log.d(TAG, "id is " + id); // is -1
知道可能出现什么问题吗?
答案 0 :(得分:1)
分配标记时,必须使用id而不是字符串资源。
使用类似
的内容categoryItem.setTag(R.id.your_id_for_position, position);
而不是
categoryItem.setTag(R.string.tag_category_position, position);
所述
指定的键应该是在应用程序的资源中声明的id,以确保它是唯一的
答案 1 :(得分:0)
为什么要两次调用setTag?
你必须在行下面设置一次:
categoryItem.setTag(position);
Onclick方法
Integer id = (Integer)view.getTag();
Log.d(TAG, "id is " + id);
完成强>
答案 2 :(得分:0)
我建议您在代码中定义并使用持有者。
private class TagHolder
{
int id; int position;
}
TagHolder tagHolder = new TagHolder();
tagHolder.id = 2;
tagHolder.position = 3;
view.setTag(tagHolder);
public void onClick(View v) {
TagHolder tagHolder = (TagHolder)view.getTag();
// tagHolder.id, tagHolder.position
}