Android 动态膨胀视图时出现的问题

Android 动态膨胀视图时出现的问题,android,android-layout,view,layout-inflater,Android,Android Layout,View,Layout Inflater,我正在向当前视图动态添加布局。但问题是,即使光标中有两个以上的值,也只有一个视图膨胀 这意味着旧数据被覆盖。但我想在phoneCrsr中为每条记录添加新视图 我做错了什么 Cursor phoneCrsr = database.rawQuery(phoneSql, null); while(phoneCrsr.moveToNext()){ phone_number = new ArrayList<String&

我正在向当前视图动态添加布局。但问题是,即使光标中有两个以上的值,也只有一个视图膨胀

这意味着旧数据被覆盖。但我想在
phoneCrsr
中为每条记录添加新视图

我做错了什么

            Cursor phoneCrsr = database.rawQuery(phoneSql, null);
            while(phoneCrsr.moveToNext()){
                phone_number = new ArrayList<String>();                 
                String number = phoneCrsr.getString(phoneCrsr.getColumnIndex(MySQLiteHelper.COLUMN_PHN_NUMBER));

                if(!number.isEmpty()){
                    phone_number.add(number);                   

                    LayoutInflater inflator = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View view = inflator.inflate(R.layout.phone_number_textview, null);

                    // fill in any details dynamically here
                    TextView phoneTv = (TextView) view.findViewById(R.id.phone_number);
                    phoneTv.setText(number);

                    // insert into main view
                    LinearLayout phoneLayout = (LinearLayout) findViewById(R.id.phone_info);
                    phoneLayout.setVisibility(View.VISIBLE);
                    ((ViewGroup) phoneLayout).addView(view, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));

                    //phoneLayout.setPadding(20,0,0, 0);
                    //phoneLayout.setBackgroundColor(Color.WHITE);      
                }                   
                Log.e("PHONE DETAIL:",phone_number.toString());
            }
            phoneCrsr.close();
Cursor phoneCrsr=database.rawQuery(phoneSql,null);
while(phoneCrsr.moveToNext()){
电话号码=新的ArrayList();
String number=phoneCrsr.getString(phoneCrsr.getColumnIndex(MySQLiteHelper.COLUMN\u PHN\u number));
如果(!number.isEmpty()){
电话号码。添加(号码);
LayoutFlater充气器=(LayoutFlater)getApplicationContext().getSystemService(Context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.phone\u number\u textview,空);
//在此处动态填写任何详细信息
TextView phoneTv=(TextView)view.findViewById(R.id.phone\u号码);
phoneTv.setText(数字);
//插入主视图
LinearLayout phoneLayout=(LinearLayout)findViewById(R.id.phone\u info);
phoneLayout.setVisibility(View.VISIBLE);
((ViewGroup)phoneLayout).addView(视图,0,新的ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_父级,ViewGroup.LayoutParams.FILL_父级));
//设置填充(20,0,0,0);
//电话布局。setBackgroundColor(颜色。白色);
}                   
Log.e(“电话详细信息:”,电话号码.toString());
}
phoneCrsr.close();

当您将视图添加到“主”布局时,您告诉它在两个方向上填充父视图:

((ViewGroup) phoneLayout).addView(view, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
如果添加的视图填充了整个
线性布局
,您将看到的就是这些。添加另一个时,它在一个方向上“偏离边缘”(取决于方向)。如果要垂直添加,请将高度更改为
WRAP\u CONTENT
。对于水平布局,请更改宽度

通常,您还可能希望简化
addView
调用。首先,不必将其强制转换为
视图组。您还可以完全跳过
LayoutParams
构造函数,只需使用。像这样的方法应该会奏效:

phoneLayout.addView(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.FILL_PARENT);

总而言之,拉古南丹的评论是最好的“答案”。您可能应该为此使用
列表视图
,因为它正是为此而设计的。

您需要为每个记录创建一个视图吗?为什么要将视图嵌入textview。将listview与其文本视图一起使用dynamic@Raghunandan:因为我的外部视图是
scrollview
,所以它在某个地方读到我不应该在“scrollview”内部使用
listview
。这样就不需要scrollview了,因为listview本身可以滚动,因为它的内容可以增加到主屏幕的实际高度。那是另一回事。我所能做的就是解决我面临的问题。listview也可以滚动。我不明白你在说什么。无论如何,祝你好运,谢谢你的解释。你关于布局方向的评论解决了我的问题。