作为一个小小的实验,我试图做以下事情。
我有一个描述垂直线性布局的AXML,其中包含一个列表视图(仅填充200dp的垂直线性布局)。当活动以SetContentView开始时,AXML会膨胀。然后使用其适配器正确填充列表视图。
在listview适配器的GetView方法中,我试图动态创建一个按钮并将其添加到线性布局,但由于某种原因,没有添加按钮。
如果我尝试在适配器的构造函数方法中添加按钮,则会正确添加该按钮。
你能告诉我可能出现的问题吗?
让我添加一些代码:
class TracksAdapter : BaseAdapter<string> {
Activity context;
List<Dictionary<string,string>> trackList;
// constructor
public TracksAdapter (Activity context, List<Dictionary<string,string>> trackList) {
this.context = context;
this.trackList = trackList;
// Just as a little test, if I create the button from here it will be correctly added to linear layout:
var ll = context.FindViewById<LinearLayout>(Resource.Id.linLayForResultsActivity);
Button b1 = new Button(context);
b1.Text = "Btn";
ll.AddView(b1);
}
public override View GetView(int position, View oldView, ViewGroup parent) {
// if I create the button from here it will not be added to the layout
var ll = context.FindViewById<LinearLayout>(Resource.Id.linLayForResultsActivity);
Button b1 = new Button(context);
b1.Text = "Btn";
ll.AddView(b1);
// this other code is working
View view = context.LayoutInflater.Inflate(Resource.Layout.ResultItem, null);
var artistLabel = view.FindViewById<TextView>(Resource.Id.resultArtistNameTextView);
artistLabel.Text = trackList[position]["trackArtistName"];
return view;
}
}
<小时/> 更新:添加更多上下文信息,因为我知道如果没有它可能会有点奇怪:
在GetView中,我不需要返回我想在那里创建的新按钮。 GetView只需要返回一个listview视图项,但是,在执行时,GetView还必须创建一个按钮并将其添加到包含listview的线性布局中。
真正的代码要复杂得多。我在问题中简化了它。在实际代码中,listview项目由文本和按钮组成。 GetView还将事件处理程序附加到按钮上。然后我需要的是,当用户点击任何列表视图项目中的按钮时,列表视图下方会添加另一个按钮。所以我需要在GetView中添加另一个按钮的代码,并且需要在listview的外部添加按钮,即。到包含listview的线性布局。
答案 0 :(得分:0)
我查看了您的代码,您正在返回查看,当您将按钮添加到 ll 时,您应该返回 ll
你在getView()中返回的是你在列表项目布局中看到的内容,因为你将按钮添加到 ll 并返回视图,按钮赢了不会出现。
您可以在实施时将按钮添加到查看
同时检查一下:
尝试使用boolean addViewInLayout (View child, int index, ViewGroup.LayoutParams params)
http://developer.android.com/reference/android/view/ViewGroup.html#addViewInLayout(android.view.View,int,android.view.ViewGroup.LayoutParams)
答案 1 :(得分:0)
它正在工作......现在没有做任何改变,它应该正常工作......!啊! 我真的不知道我在这里做错了什么...可能是因为某种缓存旧版本的安装APK ..?我知道这种事情可能会发生,这就是为什么我总是在将新版本下载到设备之前卸载应用程序......但仍然......!