Переопределить bool во фрагменте, используя C # - Xamarin - PullRequest
0 голосов
/ 18 мая 2018

У меня проблемы с моими кодами.Переопределение bool не работает во фрагменте, но когда я пробую это на активности.Работает отлично.Ошибка говорит: «Не найдено подходящего метода для переопределения»Я не знаю, почему переопределение bool не работает во фрагменте.

Here is the picture of the error

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using SupportFragment = Android.Support.V4.App.Fragment;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Support.V4.Widget;
using Android.Support.V4.App;
using Android.Views.Animations;

namespace EFCAndroid
{
    public class Fragment_menu : SupportFragment
    {
        private float initialX;
        private ViewFlipper viewflipper;
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your fragment here
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            // Use this to return your custom view for this Fragment
            // return inflater.Inflate(Resource.Layout.YourFragment, container, false);
            View view = inflater.Inflate(Resource.Layout.fragment_menu, container, false);

            viewflipper = view.FindViewById<ViewFlipper>(Resource.Id.viewFlipper);

            viewflipper.SetInAnimation(Activity, Resource.Animation.fade_in);
            viewflipper.SetOutAnimation(Activity, Resource.Animation.fade_out);
            viewflipper.SetFlipInterval(5000);
            viewflipper.StartFlipping();

            return view;

        }

        public override bool OnTouchEvent(MotionEvent ontouch)
        {

            //switch (ontouch.Action)
            switch(ontouch.Action)
            {
                case MotionEventActions.Down:
                    initialX = ontouch.GetX();
                    break;
                case MotionEventActions.Up:
                    float finalX = ontouch.GetX();
                    if (initialX > finalX)
                    {
                        if (viewflipper.DisplayedChild == 1)
                            break;
                        //viewflipper.SetInAnimation(this, Resource.Animation.fade_in);
                        //viewflipper.SetInAnimation(this, Resource.Animation.fade_out);
                        viewflipper.ShowNext();
                    }
                    else
                    {
                        if (viewflipper.DisplayedChild == 0)
                            break;
                        //viewflipper.SetInAnimation(this, Resource.Animation.fade_in);
                        //viewflipper.SetInAnimation(this, Resource.Animation.fade_out);
                        viewflipper.ShowPrevious();
                    }
                    break;
            }
            return false;
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Эта ссылка использует Java.После перевода в c # это должно выглядеть так:

using Android.App;
using Android.OS;
using Android.Util;
using Android.Views;

namespace FragmentTest
{
    public class Fragment1 : Fragment,View.IOnTouchListener
    {
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your fragment here
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            // Use this to return your custom view for this Fragment
            var view = inflater.Inflate(Resource.Layout.layout1, container, false);
            view.SetOnTouchListener(this);
            return view;


        }

        public bool OnTouch(View v, MotionEvent e)
        {
            if (e.Action == MotionEventActions.Move){
                //do something 
                Log.Error("lv","MOVE++++++++++++++++++");
                }

            return true;
        }
    }
}

Хорошо работает.

Потому что во Fragment нет метода OnTouchEvent, поэтому нам нужно реализовать его самостоятельно.Или есть другой способ добиться этого путем определения интерфейса и использования метода dispatchTouchEvent, он более сложный, чем приведенные выше коды.

0 голосов
/ 18 мая 2018

Фрагмент не подлежит замене.может быть, вы можете использовать эту ссылку Как обрабатывать сенсорные события на фрагменте?

...