从listview适配器GetView方法

时间:2016-04-12 11:14:36

标签: android android-layout listview xamarin.android android-adapter

作为一个小小的实验,我试图做以下事情。

我有一个描述垂直线性布局的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的线性布局。

2 个答案:

答案 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 ..?我知道这种事情可能会发生,这就是为什么我总是在将新版本下载到设备之前卸载应用程序......但仍然......!