当用户在Android应用中按下按钮时,添加文本到列表?

时间:2014-06-25 22:11:31

标签: c# android list textview xamarin

我在使用诗歌按钮时遇到了一些麻烦。我不确定我做错了什么,但我需要在用户按下诗歌按钮的地方进行操作,并将“Verse”一词的文本视图添加到创建的列表中。请帮忙。我究竟做错了什么。这是在Xamarin中使用C#为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[]{"person1@xamarin.com", "person2@xamrin.com"} );

        email.PutExtra (Android.Content.Intent.ExtraCc,
            new string[]{"person3@xamarin.com"} );

        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;
    }
}

}

1 个答案:

答案 0 :(得分:0)

您错过了将监听器注册到Button点击并覆盖onClick