1

ヘッダーが TextView と Button の子を持つ相対レイアウトであるカスタム ExpandableListView を作成しました。

GetGroupView で、新しいアクティビティを開始する btn.Click デリゲートを定義します。

      public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)

    {

        var view = convertView;

        var group = this.groups[groupPosition];

        if (view == null)

        {

            var inflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater;

            view = inflater.Inflate(Resource.Layout.ExpListViewItem, null);

        }

        view.FindViewById<TextView>(Resource.Id.expListViewItem_txt).Text = group.GetHeader();

        view.FindViewById<Button>(Resource.Id.expListViewItem_btn).Focusable = false;

        view.FindViewById<Button>(Resource.Id.expListViewItem_btn).Click += (object sender, EventArgs e) =>

        {

            var type = e.GetType();

            if(sender.GetType() == typeof(Button))

            {

            Intent temp = new Intent(context,typeof(TestActivity));

            temp.PutExtra("TestValue", group.GetHeader());

            context.StartActivity(typeof(TestActivity));

            }

        };

        return view;

    }

ChildItem をクリックすると、別のアクティビティを開始したい:

    public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)

    {

        var view = convertView;

        var group = this.groups[groupPosition];

        var item = group.GetItems()[childPosition];

        if (view == null)

        {

            var inflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater;

            view = inflater.Inflate(Resource.Layout.expListViewChildren, null);

        }

        view.FindViewById<TextView>(Resource.Id.expListViewChildren_txt).Text = item.GetHeader();

        view.Click += delegate  

        {

            Intent temp = new Intent(context, typeof(test));

            temp.PutExtra("TestValue", item.GetHeader());

            context.StartActivity(temp);

        };



        return view;
    }

ListView が折りたたまれている場合は問題ありませんが、展開されている場合はアクティビティが 2 回開始されます (btn.click デリゲートが 2 回起動されるため)。

ここで何が欠けていますか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

私は非常によく似たものに遭遇しました - あなたのデリゲートが2回呼び出されて2つのインスタンスを宣言していないことを確認してください. リストビューが展開されたら、デリゲート宣言を再度呼び出しますか?

2 つのハンドラーが存在する可能性が高く、それぞれを見つけて、そのうちの 1 つを排除する必要があります。

于 2014-03-12T20:06:22.243 に答える