2016-07-17 6 views
0

私は現在、複数の編集テキスト&イメージボタンで大きな活動をしています。 私のナビゲーションのスワイプジェスチャーを追加すると、すべてのウィジェットはクリックを発生させません。SwipegestureのEditText&ImageButton

誰かがこの問題に直面して解決策を持っていますか?

ありがとうございました。

編集、追加のコードソース:

は、ここでは、このフォームで直線的なレイアウトは、ビューはので、私はちょうど最初のEditTextまでのコードを投稿する非常に大きいです。

<!-- Form --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:weightSum="100"> 
     <Space 
      android:layout_width="match_parent" 
      android:layout_weight="2" 
      android:layout_height="0dp" /> 
     <!--Title--> 
     <LinearLayout 
      android:layout_height="0dp" 
      android:layout_weight="10" 
      android:layout_width="match_parent" 
      android:orientation="horizontal" 
      android:weightSum="100"> 
     <Space 
      android:layout_width="0dp" 
      android:layout_weight="2" 
      android:layout_height="match_parent" /> 
     <Cheer_up_app.Droid.Model.Custom.FontTextView 
      android:textColor="@color/white" 
      customFont:customFont="Fonts/CarterOne.ttf" 
      android:text="@string/title" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="right" 
      android:gravity="center_vertical|right" 
      android:layout_weight="25" /> 
     <Space 
      android:layout_width="0dp" 
      android:layout_weight="2" 
      android:layout_height="match_parent" /> 
     <EditText 
      android:singleLine="true" 
      android:layout_width="0dp" 
      android:layout_weight="70" 
      android:layout_height="wrap_content" 
      android:id="@+id/newchallenge_title" 
      android:background="@drawable/border_all" 
      android:paddingRight="5dp" 
      android:paddingLeft="5dp" 
      android:layout_gravity="center_vertical" /> 
     <Space 
      android:layout_width="0dp" 
      android:layout_weight="2" 
      android:layout_height="match_parent" /> 
</LinearLayout> 
<!-- ect...--> 
</LinearLayout> 

ここでこれは私の活動です。私が書いた何かがこのバグを処理できるかどうかわからないので、私はコードを削除しませんでした。

namespace Cheer_up_app.Droid.Model 
{ 
    [Activity(Label = "NewChallengeActivity", ScreenOrientation = ScreenOrientation.Portrait, WindowSoftInputMode = SoftInput.AdjustPan)] 
    public class NewChallengeActivity : Activity, GestureDetector.IOnGestureListener 
    { 
     TextView pictureName; 
     private Challenge currentChallenge; 
     private List<string> hoursList; 
     private List<string> daysList; 
     private List<Cheer_up_app.Model.Type> challengeType; 
     private ChallengeC commonChallenge; 
     private int initialSpinnerH; 
     private int initialSpinnerD; 
     private TimeSpan selectedTimespan; 
     private Bitmap helpImage; 
     private string type; 

     #region gesture declaration 
     private GestureDetector _gestureDetector; 
     private const int SWIPE_MIN_DISTANCE = 120; 
     private const int SWIPE_MAX_OFF_PATH = 250; 
     private const int SWIPE_THRESHOLD_VELOCITY = 200; 
     #endregion 

     protected async override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 


      this.SetContentView(Resource.Layout.NewChallengeView); 
      await InitChallenge(); 

      InitView(); 

      _gestureDetector = new GestureDetector(this); 

     } 

     /// <summary> 
     /// init challenge object 
     /// </summary> 
     private async Task InitChallenge() 
     { 
      FindViewById<LinearLayout>(Resource.Id.newChallenge_progress_layout).Visibility = ViewStates.Visible; 

      currentChallenge = new Challenge(); 
      commonChallenge = new ChallengeC(); 
      currentChallenge.Difficulty = CommonResources.Easy; 
      currentChallenge.UserId = User.Instance.Id; 

      challengeType = await commonChallenge.GetListType(); 
      TranslateType(); 
      currentChallenge.ChallengeTypeId = challengeType.FirstOrDefault(ct => ct.TypeName == CommonResources.Question).Id; 
      FindViewById<LinearLayout>(Resource.Id.newChallenge_progress_layout).Visibility = ViewStates.Gone; 

     } 

     /// <summary> 
     /// Init view 
     /// </summary> 
     private void InitView() 
     { 



      // buttons type 
      var buttonQuestion = FindViewById<ImageButton>(Resource.Id.typeQuestion); 
      var buttonPhoto = FindViewById<ImageButton>(Resource.Id.typePhoto); 
      var buttonVideo = FindViewById<ImageButton>(Resource.Id.typeVideo); 


      // buttons level 
      var buttonEasy = FindViewById<ImageButton>(Resource.Id.levelEasy); 
      var buttonMed = FindViewById<ImageButton>(Resource.Id.levelMed); 
      var buttonHard = FindViewById<ImageButton>(Resource.Id.levelHard); 

      buttonEasy.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Easy_act), "drawable", PackageName)); 
      buttonMed.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Medium_des), "drawable", PackageName)); 
      buttonHard.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Hard_des), "drawable", PackageName)); 


      // button add photo 
      var buttonAdd = FindViewById<ImageButton>(Resource.Id.addPhoto); 

      // button next 
      var buttonNext = FindViewById<ImageButton>(Resource.Id.imageButtonNext); 
      buttonNext.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Next), "drawable", PackageName)); 


      // button back 
      var buttonBack = FindViewById<ImageButton>(Resource.Id.buttonReturnNewChallenge); 
      buttonBack.Click += delegate 
      { 
       OnBackPressed(); 
      }; 

      // set one choice for type 
      buttonQuestion.Click += delegate 
      { 
       buttonQuestion.SetImageResource(Resource.Drawable.button_question_enable); 
       buttonPhoto.SetImageResource(Resource.Drawable.button_photo_disable); 
       buttonVideo.SetImageResource(Resource.Drawable.button_video_disable); 
       currentChallenge.ChallengeTypeId = challengeType.FirstOrDefault(ct => ct.TypeName == CommonResources.Question).Id; 
       type = CommonResources.Question; 

      }; 
      buttonPhoto.Click += delegate 
      { 
       buttonPhoto.SetImageResource(Resource.Drawable.button_photo_enable); 
       buttonQuestion.SetImageResource(Resource.Drawable.button_question_disable); 
       buttonVideo.SetImageResource(Resource.Drawable.button_video_disable); 
       currentChallenge.ChallengeTypeId = challengeType.FirstOrDefault(ct => ct.TypeName == CommonResources.Photo).Id; 
       type = CommonResources.Photo; 

      }; 
      buttonVideo.Click += delegate 
      { 
       buttonVideo.SetImageResource(Resource.Drawable.button_video_enable); 
       buttonQuestion.SetImageResource(Resource.Drawable.button_question_disable); 
       buttonPhoto.SetImageResource(Resource.Drawable.button_photo_disable); 
       currentChallenge.ChallengeTypeId = challengeType.FirstOrDefault(ct => ct.TypeName == CommonResources.Video).Id; 
       type = CommonResources.Video; 

      }; 

      // set one choice for level 
      buttonEasy.Click += delegate 
      { 
       buttonEasy.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Easy_act), "drawable", PackageName)); 
       buttonMed.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Medium_des), "drawable", PackageName)); 
       buttonHard.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Hard_des), "drawable", PackageName)); 
       currentChallenge.Difficulty = CommonResources.Easy; 
      }; 
      buttonMed.Click += delegate 
      { 
       buttonEasy.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Easy_des), "drawable", PackageName)); 
       buttonMed.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Medium_act), "drawable", PackageName)); 
       buttonHard.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Hard_des), "drawable", PackageName)); 
       currentChallenge.Difficulty = CommonResources.Medium; 

      }; 
      buttonHard.Click += delegate 
      { 
       buttonEasy.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Easy_des), "drawable", PackageName)); 
       buttonMed.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Medium_des), "drawable", PackageName)); 
       buttonHard.SetImageResource(Resources.GetIdentifier(Resources.GetString(Resource.String.Hard_act), "drawable", PackageName)); 
       currentChallenge.Difficulty = CommonResources.Hard; 

      }; 

      // choice photo 

      pictureName = FindViewById<TextView>(Resource.Id.pictureName); 
      pictureName.Visibility = ViewStates.Invisible; 

      buttonAdd.Click += delegate 
      { 
       var imageIntent = new Intent(); 
       imageIntent.SetType("image/*"); 
       imageIntent.SetAction(Intent.ActionGetContent); 
       StartActivityForResult(Intent.CreateChooser(imageIntent, "Select photo"), 0); 
      }; 


      hoursList = ChallengeFormData.Hours(); 
      daysList = ChallengeFormData.Days(); 
      PrepareSpinnersData(); 
      //prepare spinner 
      Spinner spinnerD = (Spinner)FindViewById<Spinner>(Resource.Id.spinnerDay); 
      ArrayAdapter adapter = new SpinnerAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, daysList); 
      spinnerD.Adapter = adapter; 

      Spinner spinnerH = (Spinner)FindViewById<Spinner>(Resource.Id.spinnerHour); 
      adapter = new SpinnerAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, hoursList); 
      spinnerH.Adapter = adapter; 

      initialSpinnerH = spinnerH.SelectedItemPosition; 
      initialSpinnerD = spinnerD.SelectedItemPosition; 
      //event for spinnners 
      spinnerH.ItemSelected += (sender, args) => 
      { 
       if (args.Position != initialSpinnerH) 
       { 
        spinnerD.SetSelection(0); 
        string selectedHour = spinnerH.SelectedItem.ToString().Split(' ')[0]; 
        string hour = string.Empty; 
        if (selectedHour.Length == 3) 
        { 
         hour = selectedHour[0] + "" + selectedHour[1] + ":00"; 

        } 
        else 
        { 
         hour = selectedHour[0] + ":00"; 
        } 
        TimeSpan.TryParse(hour, out selectedTimespan); 
       } 
      }; 

      //event for spinnners 
      spinnerD.ItemSelected += (sender, args) => 
      { 
       if (args.Position != initialSpinnerH) 
       { 
        spinnerH.SetSelection(0); 
        string day = spinnerD.SelectedItem.ToString().Split(' ')[0]; 
        TimeSpan.TryParse(day, out selectedTimespan); 

       } 
      }; 

     } 

     /// <summary> 
     /// Traduce typename in each type 
     /// </summary> 
     /// <param name="types">Type list</param> 
     private void TranslateType() 
     { 
      List<string> typeList = new List<string>(); 
      foreach (var type in challengeType) 
      { 
       int resource = Resources.GetIdentifier(type.TypeName, "string", PackageName); 
       type.TranslatedTypeName = Resources.GetString(resource); 
      } 
     } 

     /// <summary> 
     /// Prepare spinners data adding correct day or hour word 
     /// </summary> 
     private void PrepareSpinnersData() 
     { 
      string days = Resources.GetString(Resource.String.days); 
      string hours = Resources.GetString(Resource.String.hours); 
      hoursList.Insert(0, Resources.GetString(Resource.String.chooseDuration)); 
      daysList.Insert(0, Resources.GetString(Resource.String.chooseDuration)); 

      for (var i=1;i<hoursList.Count; i++) 
      { 
       hoursList[i] = string.Format("{0} {1}", hoursList[i], hours); 
      } 

      for (var i = 1; i < daysList.Count; i++) 
      { 
       daysList[i] = string.Format("{0} {1}", daysList[i], days); 
      } 
     } 

     /// <summary> 
     /// Navigate to OnBackPressed 
     /// </summary> 
     public override void OnBackPressed() 
     { 
      base.OnBackPressed(); 
      this.OverridePendingTransition(Resource.Animation.LeftToRightIn, Resource.Animation.LeftToRightOut); 
     } 

     protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
     { 
      base.OnActivityResult(requestCode, resultCode, data); 

      if (resultCode == Result.Ok) 
      { 
       pictureName.Visibility = ViewStates.Visible; 
       pictureName.Text = data.Data.LastPathSegment; 
       helpImage = MediaStore.Images.Media.GetBitmap(ContentResolver, data.Data); 
      } 
     } 

     /// <summary> 
     /// Button next, go to friend list 
     /// </summary> 
     /// <param name="v"></param> 
     [Java.Interop.Export("BtnNextChallenge")] 
     public void BtnNextChallenge(View v) 
     { 
      currentChallenge.Title = FindViewById<EditText>(Resource.Id.newchallenge_title).Text; 
      currentChallenge.Description = FindViewById<EditText>(Resource.Id.newchallenge_description).Text; 

      if (!IsValidated()) 
      { 
       //user already registered, display error message 
       AlertDialog.Builder alert = new AlertDialog.Builder(this); 
       alert.SetTitle(GetString(Resource.String.emptyAnswer)); 
       alert.SetMessage(GetString(Resource.String.emptyAnswerText)); 
       //run the alert in UI thread to display in the screen 
       RunOnUiThread(() => { 
        alert.Show(); 
       }); 
       return; 
      } 

      currentChallenge.ValidityPeriod = selectedTimespan; 
      currentChallenge.Points = commonChallenge.CalculPoints(type, currentChallenge.Difficulty); 


      Intent activity = new Intent(this, typeof(FriendListActivity)); 
      activity.PutExtra("NewChallenge", Challenge.ConvertToJson(currentChallenge)); 
      if(helpImage != null) 
      { 
       byte[] bitmapData; 
       using (var stream = new MemoryStream()) 
       { 
        helpImage.Compress(Bitmap.CompressFormat.Png, 0, stream); 
        bitmapData = stream.ToArray(); 
       } 
       activity.PutExtra("byteArray", bitmapData); 
      } 


      StartActivity(activity); 
      Finish(); 
     } 

     /// <summary> 
     /// Check if challenge is validated 
     /// </summary> 
     /// <returns>boolean</returns> 
     private bool IsValidated() 
     { 
      if(currentChallenge.ChallengeTypeId != 0 && !string.IsNullOrEmpty(currentChallenge.Description) && !string.IsNullOrEmpty(currentChallenge.Difficulty) && !string.IsNullOrEmpty(currentChallenge.Title) && !string.IsNullOrEmpty(currentChallenge.UserId) && selectedTimespan != null) 
      { 
       return true; 
      } 

      return false; 
     } 

     #region GestureDetector.IOnGestureListener methods 
     public bool OnDown(MotionEvent e) 
     { 
      return false; 
     } 

     public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 
      try 
      { 
       if (System.Math.Abs(e1.GetY() - e2.GetY()) > SWIPE_MAX_OFF_PATH) 
       { 
        return false; 
       } 

       // right to right swipe 
       if (e2.GetX() - e1.GetX() > SWIPE_MIN_DISTANCE && System.Math.Abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       { 
        OnBackPressed(); 
       } 
      } 
      catch (System.Exception e) 
      { 
       Log.Debug("gesture", e.Message); 
      } 
      return true; 
     } 

     public void OnLongPress(MotionEvent e) 
     { 
     } 

     public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
     { 
      return false; 
     } 

     public void OnShowPress(MotionEvent e) 
     { 
     } 

     public bool OnSingleTapUp(MotionEvent e) 
     { 
      return false; 
     } 

     public override bool DispatchTouchEvent(MotionEvent e) 
     { 
      _gestureDetector.OnTouchEvent(e); 
      return false; 
     } 

     #endregion 
    } 
} 
+0

ソースコードを提供できますか? – jzeferino

+0

あなたが使用したジェスチャーの種類と他のコードを共有してから修正することができます。 –

+0

ええ、私は今日それをします – OrcusZ

答えて

1

あなたはそれがそのベースDispatchTouchEventのコンストラクタを呼び出すことはありませんので、それはウィンドウ要素にイベントをディスパッチしないDispatchTouchEvent &をオーバーライドしています。お試しください

public override bool DispatchTouchEvent(MotionEvent ev) 
{ 
    _gestureDetector.OnTouchEvent(ev); 
    return base.DispatchTouchEvent(ev); 
} 
+0

答えのためにありがとう、私は一日後にそれを試してみます、それが動作するかどうか、私はあなたに戻ってきます – OrcusZ

+0

多くのありがとう、それは働く! – OrcusZ

+0

@OrcusZ Cool !!! – sJy