2014-01-05 39 views
1

我遇到的问题是我在展开的视图中键入的文本没有被保存。当我关闭一组以打开另一组时,所有保存在第一组中的值消失。任何人都可以告诉我该怎么做,所以不仅可以保存它,而且可以保存当我打开expandedView时,也可以保存当我重新启动或恢复时。我不知道如何使用onResume和onRestart函数。由于EditText在关闭expandedView后消失

我附上的代码,以及:

import android.content.Context; 
import android.content.SharedPreferences; 
import android.database.DataSetObserver; 
import android.graphics.Color; 
import android.preference.PreferenceManager; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.EditText; 
import android.widget.ListAdapter; 
import android.widget.TextView; 

public class MyAdapter extends BaseExpandableListAdapter 
{ 
    private int counter; 
    SharedPreferences getPrefs; 
    private Context context; 
    String[] parent= new String [4]; 
    String[][] child= new String [4][4]; 
    String [][] weights= new String [4][4]; 

    boolean KU=false; 
    boolean MC=false; 
    boolean TI=false; 
    boolean C=false; 
    boolean allEdited=false; 

    EditText et1; 
    EditText et2; 
    EditText et3; 
    EditText et4; 

    public MyAdapter(Context context) 
    { 
     this.context=context; 
    } 

    @Override 
    public Object getChild(int arg0, int arg1) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, 
      ViewGroup parent) 
    { 
     counter++; 

     if (!allEdited) 
     { 
      et1= new EditText (context); 
      et2= new EditText (context); 
      et3= new EditText (context); 
      et4= new EditText (context); 

      child[groupPosition][0]=et1.getText().toString();  
      child[groupPosition][1]=et2.getText().toString(); 
      child[groupPosition][2]=et3.getText().toString(); 
      child[groupPosition][3]=et4.getText().toString(); 
     } 

     if(!KU) 
     { 
      et1.setText(child[groupPosition][childPosition]); 
      et1.setPadding(50, 10, 10, 10); 
      et1.setTextSize(15); 
      et1.setTextColor(Color.WHITE); 
      et1.setFocusable(true); 
      et1.setInputType(0x00000002); 
      weights[groupPosition][0]=(et1.getText().toString()); 

     } 
     if (!et1.getText().toString().equals("")) 
     { 
      KU=true; 
     } 
     if(KU) 
     { 
      et1.setText(weights[groupPosition][0]); 
      et1.setFreezesText(true); 
     } 

     if (!MC) 
     { 
      et2.setText(child[groupPosition][childPosition]); 
      et2.setPadding(50, 10, 10, 10); 
      et2.setTextSize(15); 
      et2.setTextColor(Color.WHITE); 
      et2.setFocusable(true); 
      et2.setInputType(0x00000002); 
      weights[groupPosition][1]=(et2.getText().toString()); 
     } 
     else if (!et2.getText().toString().equals("")) 
     { 
      MC=true; 
     } 
     weights[groupPosition][1]=(et2.getText().toString()); 

     if(MC) 
     { 
      et1.setText(weights[groupPosition][1]); 
     } 


     if (!TI) 
     { 
      et3.setText(child[groupPosition][childPosition]); 
      et3.setPadding(50, 10, 10, 10); 
      et3.setTextSize(15); 
      et3.setTextColor(Color.WHITE); 
      et3.setFocusable(true); 
      et3.setInputType(0x00000002); 
      weights[groupPosition][2]=(et3.getText().toString()); 
     } 

     else if (!et3.getText().toString().equals("")) 
     { 
      TI=true; 
     } 
     weights[groupPosition][2]=(et3.getText().toString()); 

     if(TI) 
     { 
      et3.setText(weights[groupPosition][2]); 
     } 

     if (!C) 
     { 
      et4.setText(child[groupPosition][childPosition]); 
      et4.setPadding(50, 10, 10, 10); 
      et4.setTextSize(15); 
      et4.setTextColor(Color.WHITE); 
      et4.setFocusable(true); 
      et4.setInputType(0x00000002); 
      weights[groupPosition][3]=(et4.getText().toString()); 
     } 

     else if (!et4.getText().toString().equals("")) 
     { 
      C=true; 
     } 
     weights[groupPosition][3]=(et1.getText().toString()); 

     if(C) 
     { 
      et4.setText(weights[groupPosition][3]); 
     } 


     if (KU && MC && TI && C) 
     { 
      allEdited=true; 
     } 

     if (counter==1) 
      return et1; 
     else if (counter==2) 
      return et2; 
     else if (counter==3) 
      return et3; 
     else if (counter==4) 
      return et4; 
     else 
      counter=0; return et1; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     // TODO Auto-generated method stub 
     return child[groupPosition].length; 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     // TODO Auto-generated method stub 
     return groupPosition; 
    } 

    @Override 
    public int getGroupCount() 
    { 
     return parent.length; 
    } 

    @Override 
    public long getGroupId(int groupPosition) 
    { 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
    { 
     TextView tv= new TextView (context); 
     this.parent[groupPosition]=tv.getText().toString(); 

     getPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
     String allCourses= getPrefs.getString("allClasses", "Please enter your course code"); 

     String[] courses= allCourses.split(","); 

     for (int i=0;i<courses.length;i++) 
     { 
      this.parent[i]=courses[i]; 
     } 
     tv.setText(this.parent[groupPosition]); 
     tv.setPadding(50, 10, 10, 10); 
     tv.setTextSize(20); 
     tv.setTextColor(Color.GREEN); 

     return tv; 
    } 

回答

0

由于@Kapil表示可以使用list来存储这些值,但是一旦这个活动被破坏,这些值就会被销毁。如果您想要永久存储,即使重新启动应用程序,值也应该保留,应该使用共享首选项SQLite数据库

+0

我已经尝试实施SQLite数据库,但我不知道如果我做得正确。问题仍然存在。请告诉我 –

+0

还是有可能将数据保存在共享首选项中,并使其在首选项中不可见 –

+0

您正在更新您的字符串数组,例如。 child [groupPosition] [0]使用'et1.getText()。toString();'onResume将为null,因此没有值。您需要使用SQLite数据库或sharedPreference将值分配给字符串数组。这样他们将显示保存的数据。还有一些参与者,总是喜欢帮助你的答案。这将鼓励用户回答你。 –

1

你应该使用自定义列表适配器,只要您输入的TextView的东西,有一个列表,并将其分配到列表中的特定索引(位置)

+0

那仍​​然适用于扩展列表适配器? –

+0

是的,它将适用于可扩展列表适配器也 –