gpt4 book ai didi

java - 添加 View 后无法刷新布局(仅发生在 CustomAdapter 中)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:16 24 4
gpt4 key购买 nike

注意:这不应该与库有任何关系,我只是将它们包括在内以获取详细信息

问题:这个库中有一个名为 FlingContainer 的布局 https://github.com/Diolor/Swipecards .它需要另一个布局作为参数(要扔掉的卡片),在卡片内部我有一个按钮可以向卡片添加标签。在用于 Fling 容器的 CustomAdapter 中,我在 GetView 方法中有这段代码。我知道它有效,因为我可以看到电视在 Debug模式下被添加,它们只是没有出现。

我尝试过的:我尝试在没有 flingContainer 的 Activity 中执行此操作,并且 View 会立即添加,没有任何问题。我尝试从 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 在这里工作

最佳答案

布局参数

无论何时以编程方式创建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();

}
});

关于java - 添加 View 后无法刷新布局(仅发生在 CustomAdapter 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com