2014-12-02 66 views
0

我已经创建了一个微调的适配器,看起来像这样:addView()添加视图,但它不显示

public class MyAdapter extends ArrayAdapter<String> { 

private LinearLayout llContainer; 

public MyAdapter (Context context, List<String> names) { 
    super(context, 0, filters); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.some_layout, parent, false); 
    } 

    llContainer = (LinearLayout) convertView.findViewById(R.id.llContainer); 

    return convertView; 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    String name = getItem(position); 

    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.some_layout_drop, parent, false); 
    } 

    Button button = (Button)convertView.findViewById(R.id.btn); 
    button.setText(name); 
    button.setOnClickListener(new OnClickListener(){ 
     @Override 
     void onClick(View v){ 
      addItemToLinearLayout(); 
     } 
    }) 

    return convertView; 
} 

private void addItemToLinearLayout(){ 
    Button btn = new Button(); 
    btn.setText("something"); 
    btn.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.MATCH_PARENT, 
     )); 

    //HERE I ADD A BUTTON TO THE LINEAR LAYOUT llContainer 
    llContainer.addView(btn); 

} 

}

的问题是,按钮没有在显示LinearLayout中。 llContainer在getView()方法中分配的事实与此有关吗?如果我通过/从XML手动在llContainer中添加一个按钮,他就会出现。

澄清问题:我有一个微调视图。我想要的是当我点击它时,下拉菜单应该包含一些按钮。当我点击微调视图中的其中一个按钮(显示用户选择的值的部分)以添加按钮或文本视图或其他内容时。如果我尝试调试llContainer含有添加的视图的应用程序,但它似乎mMeasuredHeight和mMeasuredWidth是0,也是id为0,coordonates为0

回答

0
Button btn = new Button(); //without context? 

可能像

Button btn = new Button(context); //pass context into the function 

android.widget.Button

公共构造函数

Button(Context context) 
Button(Context context, AttributeSet attrs) 
Button(Context context, AttributeSet attrs, int defStyleAttr) 
Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 
+0

是的。我的代码要复杂得多,但是当我发布它时,我输入了它的概括性。我解决了这个问题: 'if(llContainer == null){llContainer == blablabla; }“这就是为什么这是工作?我认为getView方法被多次调用。但为什么呢? – TGeorge 2014-12-02 19:04:02

+0

为您的Spinner/ListView等中的每个项目/视图调用getView(...)方法 – 2014-12-03 06:39:36

相关问题