2016-05-10 26 views
0

在此处开发Android应用程序我从row.xml文件动态生成EditText和按钮CallRemove。将这些控件添加到LinearLayout我实现了我想要的但我的问题是我想将EditText值保存到xml文件。所以下次我打开这个应用程序时,特殊值将从xml文件中填充。无法将LinearLayout值保存到xml文件

enter image description here

添加姓名和手机号码到文本框,然后点击按钮"Add"这些值动态添加到LinearLayout。当我点击添加这个值存储到XML文件,每当我下次启动应用程序存储的XML值填充到LinearLayout

这是我的代码

public class MainActivity : Activity 
    { 
     int count = 1; 
     EditText textIn, txtPhoneNo; 
     Button buttonAdd; 
     LinearLayout container; 
     EditText textOut; 
     System.Collections.ArrayList arrList = new System.Collections.ArrayList(); 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 

      textIn = (EditText)FindViewById(Resource.Id.textin); 
      txtPhoneNo = (EditText)FindViewById(Resource.Id.txtPhoneNo); 
      buttonAdd = (Button)FindViewById(Resource.Id.add); 
      container = (LinearLayout)FindViewById(Resource.Id.container); 
     } 

     private void buttonAdd_Click(object sender, EventArgs e) 
     { 
      LayoutInflater layoutInflater = Application.Context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater; 
      View addView = layoutInflater.Inflate(Resource.Layout.row, null); 
      textOut = (EditText)addView.FindViewById(Resource.Id.textout); 
      arrList.Add(txtPhoneNo.Text); 
      if (textIn.Text != "" && txtPhoneNo.Text != "") 
      { 
       textOut.SetText(textIn.Text + " : " + txtPhoneNo.Text, TextView.BufferType.Normal); 
       container.AddView(addView); 
       Button btnCall = (Button)addView.FindViewById(Resource.Id.btnCall); 
       btnCall.Click += BtnCall_Click; 
       Button buttonRemove = (Button)addView.FindViewById(Resource.Id.remove); 
       buttonRemove.Click += ButtonRemove_Click; 
      } 
      else 
      { 
       Toast.MakeText(this, "Field can not be blank.", ToastLength.Short).Show(); 
      } 
     } 

     private void BtnCall_Click(object sender, EventArgs e) 
     { 
      var callDialog = new AlertDialog.Builder(this); 
      string strNo = After(textOut.Text,":"); 
      callDialog.SetMessage("Call " + strNo + "?"); 
      callDialog.SetNeutralButton("Call", delegate 
      { 
       var callIntent = new Intent(Intent.ActionCall); 
       callIntent.SetData(Android.Net.Uri.Parse("tel:" + strNo)); 
       StartActivity(callIntent); 
      }); 
      callDialog.SetNegativeButton("Cancel", delegate { }); 

      // Show the alert dialog to the user and wait for response. 
      callDialog.Show(); 
     } 
} 
} 

Main.axml 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context=".MainActivity"> 
    <EditText 
     android:id="@+id/textin" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:hint="name" /> 
    <EditText 
     android:id="@+id/txtPhoneNo" 
     android:layout_width="345.0dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:hint="Phone No." /> 
    <Button 
     android:id="@+id/add" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="Add" /> 
    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" /> 
</LinearLayout> 
row.xml 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <Button 
     android:id="@+id/remove" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="Remove"/> 
    <Button 
     android:id="@+id/btnCall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@id/remove" 
     android:text="Call"/> 
    <EditText 
     android:id="@+id/textout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@id/remove"/> 
</RelativeLayout> 

回答

1

不,你不能

,不能将控件动态插入xml布局。 要么你手动将其添加到xml也可以创建单独的xml控制,然后includexml到您的父母xml

<include 
    android:layout="id of your layout" 
//height ... width 
/> 

在这两个方面,你必须创建xml

我们正在创建xml并在我们的java课程中夸大它。你想要做的是完全相反的。

更新

使用共享偏好

SharedPreference shared= context.getSharedPreferences("your preference name", 
       Context.MODE_PRIVATE); 

String value = shared.getString("UserPhone","no data"); 

//set this value to your control 
+0

我正在动态存储控件,我只是想存储它的值。 – Pritish

+0

因此将其存储为共享首选项,并且在您创建动态视图时从共享首选项设置旧值。 – KDeogharkar

+0

这里我保存到共享偏好文件夹edit.PutString(“UserName”,textIn.Text.Trim()); edit.PutString(“UserPhone”,txtPhoneNo.Text.Trim()); 编辑。应用();与此代码,但我怎么能得到它在下次重新打开应用程序时 – Pritish

0

我认为你需要参考SharedPreferences在android系统。这将用于你的目的。

+0

你有什么样.... – Pritish

+0

http://www.101apps.co.za/index.php/articles/ using-androids-sharedpreferences-to-save-data.html .. example – Sush

+0

我可以在SharedPreferences中存储多个值,如List对象 – Pritish