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

标签 java android flowlayout

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

问题:这个库中有一个名为 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/

相关文章:

java - 访问用于异步 I/O 的缓冲区到底有哪些限制?

java - GroupLayout 的列未对齐

Android 主屏幕小部件文档

android - 为了解决 'google-services.json is missing',我在 Flutter 应用程序中应该在哪里放置 Google Services.json

最后一个单元格的 UICollectionView 布局

Java JScrollPane 和 FlowLayout

java - 下载文件夹的一般路径

android - 如何通过 GCM.send 发送整数、bool

Java Swing GUI : Moving around components specifically with layouts

javax.net.ssl.SSLHandshakeException : java. security.cert.CertificateException:没有可用的 X509TrustManager 实现