2015-09-23 26 views
4

注:这应该不会有什么关系库,我只是包括他们对细节不能添加视图之后刷新布局(只有在CustomAdapter发生)

问题:有一个叫FlingContainer布局从这个图书馆https://github.com/Diolor/Swipecards。它需要另一个布局作为参数(卡被折叠),在卡内部,我有一个按钮来添加标签到卡。在用于Fling容器的CustomAdapter中,我在GetView方法中使用了此代码。我知道它是有效的,因为我可以看到电视在调试模式下被添加,但它们并没有出现。

我试过了:我尝试在没有flingContainer的活动中进行此操作,并且视图立即添加,没有任何问题。我试图从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在这里工作

+1

您正在尝试添加视图是想通过一个适配器来控制的观点是正确的吗? –

+0

是啊!我很确定这是事实。 –

+0

请从CustomAdapter – 0X0nosugar

回答

3

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(); 

    } 
}); 
+0

嘿,我试过你的建议,它没有工作,它的作品时,视图添加到普通的旧活动的流程布局,但不是当流动布局是在投掷容器内。我知道该按钮的作用,因为吐司消息弹出。我还添加了图片和更新代码 –

+0

也你确定textView剂量自动有layoutParams?当我在一个活动中添加它时,它没有layoutparams –

+0

在我最初的代码中,我说了一些关于父代的内容,并且我在你的代码中看到了父代,所以如果我可能会问先生,谁是“父母”,因为对我来说这是假设成为你的'flowlayout'以及检查我的编辑,看看是否解决它。 layoutparams还会告诉父级孩子想要如何治疗,所以如果您使用的是自定义Viewgroup,那么它是必需的。也不是使用'ViewGroup.Layoutparams'检查该库是否具有'FlowLayout.LayoutParams'如果不符合你所拥有的@TintinabulatorZea – Elltz

3

没有找到,该库被打破答案

+0

真的吗?在那,我认为,虽然 – Elltz