2014-06-25 2 views
-2

У меня возникли проблемы с кнопкой стиха. я не уверен, что я делаю неправильно, но мне нужно сделать это, когда пользователь нажимает кнопку стиха, и он добавляет текстовое представление слова «Стих» к списку, который был создан. Пожалуйста помоги. Что я делаю не так. Это было написано для Android с использованием C# в Xamarin.Добавить текст в список, когда пользователь нажимает кнопку в приложении для Android?

namespace Songression 
{ 
public class CheckRect{ 
    public int top{ get; set; } 
    public int height{ get; set; } 
} 
[Activity (Label = "Songression")]   
public class results : Activity, View.IOnTouchListener 
{ 
    //CheckBox[] check; 
    List<LinearLayout> linearSet; 

    //List<CheckRect> rectList; 
    ScrollView scrollView; 
    EditText editText = null; 
    LinearLayout view; 
    bool moveOrEdit = false; 
    int screenWidth; 

    List<String> checkTextList; 
    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 
     SetContentView (Resource.Layout.results); 

     var metrics = Resources.DisplayMetrics; 
     screenWidth = metrics.WidthPixels; 
     //var widthInDp = ConvertPixelsToDp(metrics.WidthPixels); 

     view = FindViewById<LinearLayout> (Resource.Id.linearlayout0); 
     checkTextList = new List<String>(); 

     checkTextList.Add ("10 bucks in your pocket and barely making it."); 
     checkTextList.Add ("100 steps to the water"); 
     checkTextList.Add ("18 and going to Hollywood"); 
     checkTextList.Add ("3 years to propose"); 


     String checkTextSet = Intent.GetStringExtra ("MyData") ?? ""; 
     if (checkTextSet == null || checkTextSet == "") { 
     } else { 
      String[] textSet = checkTextSet.Split (','); 
      checkTextList.AddRange (textSet); 
     } 

     //Back Button 
     Button buttonBack = FindViewById<Button> (Resource.Id.buttonBack); 
     buttonBack.Click += delegate { 
      Finish(); 
     }; 

     /// 
     //AddLine Button 
     Button buttonAdd = FindViewById<Button> (Resource.Id.buttonAdd); 
     buttonAdd.Click += delegate { 
      addTextPro(false,""); 
     }; 

     /// 
     //Add Verse 
     //Button buttonVerse = FindViewById <Button> (Resource.Id.buttonVerse); 
     //buttonVerse.Click += delegate { 
      // checkTextList.Add("Verse")); 
     //}; 
     { 

      /// 
      //Email Button 
      Button buttonEmail = FindViewById<Button> (Resource.Id.buttonEmail); 
      buttonEmail.Click += delegate { 
       runEmailPro(); 
      }; 

      scrollView = FindViewById<ScrollView> (Resource.Id.scrollview0); 

      List<String> resultList = new List<String>(); 
      int count = checkTextList.Count;//myResources.check_indexSet.Count; 
      linearSet = new List<LinearLayout>(); 


      for (int index = 0; index < view.ChildCount; index++) { 
       view.RemoveViewAt (index); 
      } 

      /// 
      //Initiate Rect and Check 
      if (myResources.isLast == false) { 
       for (int index = 0; index < count; index++) { 
        InitiateWidgets (index, false); 

       } 
      } else { 
       var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path; 
       var lastPath = Path.Combine (sdCardPath, "lastlasttxt.txt"); 
       String fileNamePath = Path.Combine (sdCardPath, readFileSdcardFile (lastPath)); 
       String loadData; 
       if (File.Exists (fileNamePath)) 
        loadData = File.ReadAllText (fileNamePath); 
       else 
        return; 
       String[] splitData = loadData.Split ('\n'); 
       foreach (String item in splitData) { 
        if (item.CompareTo ("") == 0) 
         continue; 
        if (item [0] == 't') { 
         addTextPro (true, item.Substring (1)); 
        } 
        if (item [0] == 'c') { 

         bool bChecked = false; 
         if (item [1] != '0') { 
          bChecked = true; 
         } else { 

          bChecked = false; 
         } 
         InitiateWidgets (0, true, item.Substring (2), bChecked); 
        } 
       } 
      } 

      /// 
      //save function 
      Button buttonSave = FindViewById<Button> (Resource.Id.buttonSave); 
      buttonSave.Click += delegate { 
       saveResultPro(); 
      }; 

      /// 
      //move function 
      Button buttonMove = FindViewById<Button> (Resource.Id.buttonMove); 
      buttonMove.Text = "Move"; 
      buttonMove.Click += delegate { 
       removeAllFocus (moveOrEdit); 
       if (moveOrEdit == false) { 
        buttonMove.Text = "Edit"; 
        moveOrEdit = true; 
       } else { 
        buttonMove.Text = "Move"; 
        moveOrEdit = false; 
       } 
      }; 

      //final function 
      Button buttonFinal = FindViewById<Button> (Resource.Id.buttonFinal); 
      buttonFinal.Click += delegate { 
       var fResults = new Intent (this, typeof(finalResults)); 
       fResults.PutExtra ("MyData", getAllInfo()); 
       StartActivity (fResults); 
      }; 

     } 

    } 


    //wirte the file on the sdcard. 
    public void writeFileSdcardFile(String path,String write_str,bool bTitle){ 

     if (bTitle == true) { 
      var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path; 
      var lastPath = Path.Combine(sdCardPath,"lastlasttxt.txt"); 
      if (File.Exists (path) == false) { 
       File.WriteAllText (path, write_str); 

      } 
      else { 
       String[] existFile = readFileSdcardFile (path).Split('\n'); 

       foreach (String item in existFile) { 
        if (write_str.Substring (0, write_str.Length - 1).CompareTo (item) == 0) { 
         File.WriteAllText (lastPath, write_str.Substring (0, write_str.Length - 1)); 
         return; 
        } 
       } 
       File.AppendAllText (path, write_str); 
      } 

      File.WriteAllText (lastPath, write_str.Substring(0, write_str.Length - 1)); 

     } else { 
      File.WriteAllText (path, write_str); 
     } 

    } 

    public String readFileSdcardFile(String path) { 
     if (File.Exists (path)) 
      return File.ReadAllText (path); 
     else 
      return ""; 

    } 
    public String getAllInfo() 
    { 
     String extra = ""; 
     foreach(LinearLayout linear in linearSet) 
     { 
      var widgetType = linear.GetChildAt (0).GetType().ToString(); 
      if (widgetType.CompareTo ("Android.Widget.EditText") == 0) { 
       EditText editText = (EditText)linear.GetChildAt (0); 
       extra += editText.Text + "\n"; 
      } else if (widgetType.CompareTo ("Android.Widget.CheckBox") == 0) { 
       CheckBox checBox = (CheckBox)linear.GetChildAt (0); 
       if (checBox.Checked == true) 
        extra +="1" + checBox.Text + "\n"; 
       else 
        extra +="0" + checBox.Text + "\n"; 
      } 
     } 
     return extra; 
    } 
    // 
    //run email pro 
    public void runEmailPro(){ 
     var email = new Intent (Android.Content.Intent.ActionSend); 
     email.PutExtra (Android.Content.Intent.ExtraEmail, 
      new string[]{"[email protected]", "[email protected]"}); 

     email.PutExtra (Android.Content.Intent.ExtraCc, 
      new string[]{"[email protected]"}); 

     email.PutExtra (Android.Content.Intent.ExtraSubject, "Hello Email"); 

     email.PutExtra (Android.Content.Intent.ExtraText, 
      getAllInfo()); 
     email.SetType ("message/rfc822"); 
     StartActivity (email); 
    } 

    // 
    // add Text code 
    public void addTextPro(bool bLast,String textWidget) 
    { 
     LinearLayout linear = new LinearLayout (this); 
     ImageView imgView = new ImageView (this); 
     imgView.SetImageResource (Resource.Drawable.delete123); 

     editText = new EditText (this); 
     editText.SetSingleLine(); 
     editText.SetWidth(screenWidth - 50); 
     if (bLast) 
      editText.Text = textWidget; 
     if (moveOrEdit == true) 
      editText.SetOnTouchListener (this); 
     else 
      editText.SetOnTouchListener (null); 

     linear.AddView(editText); 
     linear.AddView(imgView); 

     //delete function. 
     imgView.Click += delegate { 
      deleteMessage(imgView); 

     }; 
     linearSet.Add(linear); 
     view.AddView(linear); 
    } 

    // 
    //delete message 
    public void deleteMessage(ImageView imgView) 
    { 
     var builder = new AlertDialog.Builder(this); 
     builder.SetTitle("Delete Phrase!"); 
     builder.SetMessage ("Are you sure you would like to delete this phrase?"); 
     builder.SetPositiveButton("Yes", (sender, args) => { 
      // Yes button 
      LinearLayout parent = (LinearLayout)imgView.Parent; 
      parent.Visibility = ViewStates.Invisible; 

      int childIndex = view.IndexOfChild(parent); 
      view.RemoveView(parent); 
      linearSet.Remove(parent);}); 
     builder.SetNegativeButton("No", (sender, args) => {}); 
     builder.SetCancelable(false); 
     builder.Show(); 
    } 

    // 
    //save Result 
    public void saveResultPro() 
    { 
     var factory = LayoutInflater.From(this); 
     var builder = new AlertDialog.Builder(this); 
     builder.SetTitle("Song Name"); 
     EditText songText = new EditText (this); 
     builder.SetView (songText); 
     //builder.SetView(factory.Inflate(Resource.Layout.saveDialog, 
     // FindViewById<ViewGroup>(Resource.Id.saveDialog))); 

     builder.SetPositiveButton("OK", (sender, args) => { 
      var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path; 
      //EditText songText = FindViewById<EditText> (Resource.Id.projectName); 
      var textPath = Path.Combine(sdCardPath,songText.Text); 
      var textTitlePath = Path.Combine(sdCardPath,"Titles.txt"); 
      String saveData = ""; 
      foreach(LinearLayout linear in linearSet) 
      { 
       var widgetType = linear.GetChildAt (0).GetType().ToString(); 
       if (widgetType.CompareTo ("Android.Widget.EditText") == 0) { 
        EditText editText = (EditText)linear.GetChildAt (0); 
        saveData += "t" + editText.Text + "\n"; 
       } else if (widgetType.CompareTo ("Android.Widget.CheckBox") == 0) { 
        CheckBox checBox = (CheckBox)linear.GetChildAt (0); 
        if (checBox.Checked == true) 
         saveData += "c1" + checBox.Text + "\n"; 
        else 
         saveData += "c0" + checBox.Text + "\n"; 
       } 
      } 

      writeFileSdcardFile(textTitlePath,songText.Text + "\n",true); 
      writeFileSdcardFile(textPath,saveData,false); 
     }); 
     builder.SetNegativeButton("Cancel", (sender, args) => {}); 
     builder.SetCancelable(false); 
     builder.Show(); 
    } 

    //remove All focus 
    public void removeAllFocus(bool flag){ 
     View.IOnTouchListener context = null; 
     if (flag == false){ 
      context = this; 
     } 
     else{ 
      context = null; 
     } 
     foreach (LinearLayout linear in linearSet) { 
      var widgetType = linear.GetChildAt (0).GetType().ToString(); 
      if (widgetType.CompareTo ("Android.Widget.EditText") == 0) { 
       EditText editText = (EditText)linear.GetChildAt (0); 
       editText.SetOnTouchListener (context); 
      } else if (widgetType.CompareTo ("Android.Widget.CheckBox") == 0) { 
       CheckBox checBox = (CheckBox)linear.GetChildAt (0); 
       checBox.SetOnTouchListener (context); 
      } 
     } 
     scrollView.SetOnTouchListener (context); 

    } 
    // 
    //initiate widgets 
    public void InitiateWidgets(int index,bool bLast,String widgetText = "", bool bSel = false){ 
     LinearLayout linear = new LinearLayout (this); 
     CheckBox check = new CheckBox(this); 
     ImageView imgView = new ImageView (this); 

     //delete function. 
     imgView.Click += delegate { 
      deleteMessage(imgView); 

     }; 

     if (bLast == false) { 
      //int stringIndex = Resource.String.checkname0 + myResources.check_indexSet [index]; 
      check.Text = checkTextList[index]; 
      if (index < 4) { 
       if (myResources.check_index [index] == 1) 
        check.Checked = true; 
       else { 
        check.Checked = false; 
       } 
      } else { 
       check.Checked = true; 
      } 
     } else { 
      check.Text = widgetText; 
      check.Checked = bSel; 
     } 
     check.SetWidth (screenWidth - 55); 
     check.SetOnTouchListener (null); 
     imgView.SetImageResource (Resource.Drawable.delete123); 

     linear.AddView (check); 
     linear.AddView (imgView); 
     linearSet.Add(linear); 

     view.AddView (linear); 
     scrollView.SetOnTouchListener (null); 
    } 

    // 
    //Touch Event 
    float _viewY = 0; 
    //bool flag = false; 
    bool check_flag = false; 
    LinearLayout parentLayout; 
    int selTop; 
    int selBottom; 
    bool downFlag = false; 
    public bool OnTouch(View v, MotionEvent e) 
    { 
     switch (e.Action) 
     { 
     case MotionEventActions.Down: 
      if (v != scrollView) { 
       _viewY = e.GetY(); 
       parentLayout = (LinearLayout)v.Parent; 
       selTop = parentLayout.Top; 
       selBottom = parentLayout.Bottom; 
       check_flag = true; 
       downFlag = true; 
      } 
      break; 
     case MotionEventActions.Move: 
      if (v == scrollView && downFlag == true) { 
       var top = (int)(e.GetY() - _viewY); 
       var bottom = (int)(top + 55); 
       parentLayout.Layout (parentLayout.Left, top, parentLayout.Right, bottom); 
       check_flag = false; 
      } 
      break; 
     case MotionEventActions.Up: 
      if (downFlag == false) 
       return true; 
      if (parentLayout == null) 
       return true; 
      int originalPos = 0; 
      int placePos = -1; 

       downFlag = false; 

      if (parentLayout.GetChildAt(0).GetType().ToString().CompareTo ("Android.Widget.CheckBox") == 0) { 
       if (check_flag == true) { 
        CheckBox selCheck = (CheckBox)parentLayout.GetChildAt (0); 
         if (selCheck.Checked == false) { 
          selCheck.Checked = true; 
        } else { 
          selCheck.Checked = false; 
        } 
        check_flag = false; 
        return true; 
       } 
      } 

      if (parentLayout.GetChildAt(0).GetType().ToString().CompareTo ("Android.Widget.EditText") == 0) { 
       if (check_flag == true) { 
        EditText selText = (EditText)parentLayout.GetChildAt (0); 
        check_flag = false; 
        return true; 
       } 
      } 

      if (v == scrollView) { 
       int linearCount = linearSet.Count; 
       int index; 
       for (index = 0; index < linearCount; index++) { 

        if (parentLayout == linearSet [index]) { 
         originalPos = index; 
         break; 
        } 
       } 

       //Laying position. 
       for (index = 0; index < linearCount; index++) { 
        if (originalPos == index) 
         continue; 
        if (linearSet[originalPos].Top < linearSet [index].Top) { 
         if (originalPos == index - 1) { 
          linearSet[originalPos].Layout (linearSet[originalPos].Left, 
           selTop, linearSet[originalPos].Right, 
           selBottom); 
          return true; 
         } else { 
          if (index > originalPos) { 
           placePos = index - 1; 
           break; 
          } else { 
           placePos = index; 
           break; 
          } 
         } 
        } 
        /*if (linearSet [originalPos].Top == linearSet [index].Top) { 
         linearSet[originalPos].Layout (linearSet[originalPos].Left, 
          selTop, linearSet[originalPos].Right, 
          selBottom); 
         return true; 
        }*/ 
       } 

       //Is original pos? 
       if ((originalPos == linearCount - 1) && (placePos == -1)) { 
            linearSet[originalPos].Layout (linearSet[originalPos].Left, selTop, 
             linearSet[originalPos].Right, selBottom); 
        return true; 
       } 

       if (placePos == -1) 
        placePos = linearCount - 1; 

       //Change the position on the result page. 
       int orgTop; 
       int orgBottom; 
       orgTop = linearSet [originalPos].Top; 
       orgBottom = linearSet [originalPos].Bottom; 
       linearSet [originalPos].Layout (linearSet[originalPos].Left, linearSet [placePos].Top, 
        linearSet[originalPos].Right, linearSet [placePos].Bottom); 
       LinearLayout tempLinear = linearSet [originalPos]; 

       if (originalPos >= placePos) { 
        for (index = originalPos - 1; index >= placePos; index--) { 
         linearSet [index].Layout (linearSet[originalPos].Left, linearSet [index + 1].Top, 
          linearSet[originalPos].Right, linearSet [index + 1].Bottom); 
         linearSet [index + 1] = linearSet [index]; 
        } 
       } else { 
        for (index = originalPos + 1; index <= placePos; index++){ 
         linearSet [index].Layout (linearSet[originalPos].Left, linearSet [index - 1].Top, 
          linearSet[originalPos].Right, linearSet [index - 1].Bottom); 
         linearSet [index - 1] = linearSet [index]; 
        } 
       } 
       linearSet [placePos] = tempLinear; 
       linearSet [placePos].Layout (linearSet[placePos].Left, orgTop, 
        linearSet[placePos].Right, orgBottom); 
       view.RemoveViews (0, view.ChildCount); 
       for (index = 0; index < linearSet.Count; index++) { 
        view.AddView(linearSet[index]); 
       } 
      } 
      break; 
     } 
     return true; 
    } 
} 

}

ответ

0

Вы пропустили зарегистрировать слушателя в Button мыши и переопределить onClick

+0

Можете ли вы показать мне пример? Извините, но я очень новичок в программировании. Я программировал менее месяца, и это мое первое приложение. – KiraSoftStudios

Смежные вопросы