注意:这不应该与库有任何关系,我只是为了详细说明而包含它们
问题:这个库https://github.com/Diolor/Swipecards中有一个名为FlingContainer的布局。它接受另一个布局作为参数(要翻转的卡片),在卡片内部我有一个向卡片添加标签的按钮。在用于Fling Container的CustomAdapter中,我在GetView方法中有以下代码。我知道它是有效的,因为我可以看到电视在调试模式下被添加,它们就是不显示。
我尝试过的方法:我尝试在没有flingContainer的activity中执行此操作,视图立即添加,没有任何问题。我尝试从mainActivity中搜索R.id.addTag,但是得到了一个nullPointer异常,我想这是因为addTag嵌入到了另一个布局中
结论:你知道这里出了什么问题吗?我怎样才能让addView在卡中工作?
谢谢
编辑:这是整个getView
public View getView(int position, View convertView, final ViewGroup parent) {
final View vi = inflater.inflate(layoutResource, parent, false);
TextView tv = (TextView) vi.findViewById(R.id.card_one_line);
flowLayout = (FlowLayout) vi.findViewById(R.id.flow_container);
final TextView typeTag = new TextView(getContext());
final TextView typeTag2 = new TextView(getContext());
TextView addTag = (TextView) vi.findViewById(R.id.addTag);
typeTag.setText(lines.get(position).getType());
typeTag.setBackgroundColor(getContext().getResources().getColor(R.color.nice_blue));
typeTag.setTextColor(getContext().getResources().getColor(R.color.lightening_yellow));
typeTag.setTextSize(25);
typeTag.setPadding(5, 5, 5, 5);
flowLayout.addView(typeTag);
addTag.setOnClickListener(new View.OnClickListener() {
int i = 0;
@Override
public void onClick(View v) {
TextView tv = new TextView(getContext());
tv.setBackgroundColor(getContext().getResources().getColor(R.color.nice_blue));
tv.setTextColor(getContext().getResources().getColor(R.color.lightening_yellow));
String text = "Goofy"+i++;
tv.setText(text);
tv.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
flowLayout.addView(tv);
parent.invalidate();
parent.requestLayout();
Toast.makeText(getContext(), "heyheyhey", Toast.LENGTH_SHORT).show();
}
});
tv.setText((lines.get(position).getLine()));
return vi;
}在这张图片中,我点击了flingcontainer内部的+按钮,g是在onClick外部添加的默认类型,试图让onclick在这里工作

发布于 2015-09-30 10:18:05
LayoutParams
无论何时以编程方式创建View,都不要忘记这一点。只需插入WRAP_CONTENT,生活就会很美好
还可以使用
Parent.invalidate();
Parent.requestLayout();此处的父级是您要添加到的ViewGroup
编辑
做一些调整addTag.setOnClickListener()是一种不依赖于getView()方法的方法,所以硬编码引用并不是很好。
addTag.setClickable(true);
addTag.setOnClickListener(new View.OnClickListener() {
int i = 0;
@Override
public void onClick(View v) {
TextView tv = new TextView(getContext());
tv.setBackgroundColor(getContext().getResources().getColor(R.color.nice_blue));
tv.setTextColor(getContext().getResources().getColor(R.color.lightening_yellow));
String text = "Goofy"+i++;
tv.setText(text);
tv.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
((ViewGroup)v.getParent()).addView(tv)
parent.invalidate();// do you know this "parent" guy?
//i feel it is suppose to be flowlayout
parent.requestLayout();
Toast.makeText(getContext(), "heyheyhey", Toast.LENGTH_SHORT).show();
}
});发布于 2015-10-02 12:35:35
找不到答案,库已损坏
发布于 2020-02-06 14:40:09
我最近遇到了同样的问题。我尝试了很多方法,为了解决这个问题,我调用了requestLayout()给刚才添加的那个子对象,而不是父对象。在我的例子中,我在某个索引处添加了一个子代。parent.addView(child, index) parent.getChildAt(index).requestLayout()
https://stackoverflow.com/questions/32751108
复制相似问题