0

나는 개별적인보기로 editTexts가있는 gridview가 있습니다. 다른 조각으로 전환하거나 홈 단추를 누르면 사라지기 때문에 각 editText의 값을 저장하고 싶습니다. 어떻게합니까?격자보기에서 값을 가져 오는 방법

모든보기를 보유하는 배열 또는 arraylist가 필요합니까? 내가 그렇게하면 어떻게 생각하니?

fragment_score_red.xml

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 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" 
    tools:context=".RedScorerFragment" 
    > 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 

    > 


    <TextView 
     android:id="@+id/gridLabel__red" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:text="@string/grid_label__red" 
     android:background="@color/white" 
     android:paddingTop="5dp" 
     /> 
    <GridView 
     android:id="@+id/gridViewRed" 
     android:layout_width="wrap_content" 
     android:layout_height="350dp" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@id/gridLabel__red" 
     android:columnWidth="40dp" 
     android:numColumns="3" 
     android:verticalSpacing="10dp" 
     android:horizontalSpacing="7dp" 
     android:gravity="center" 
     android:background="@color/white" 

     > 

    </GridView> 


</RelativeLayout> 

</ScrollView> 

내가 홈 버튼을 누를 때 나는

  @Override 
     public Object getItem(int position) { 

      return mGrid.getItemAtPosition(position); 
     } 

에 가져 오기 항목 방법을 변경 시도하지만, 지금은 충돌

import com.actionbarsherlock.app.SherlockFragment; 

import android.content.Context; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.GridView; 

import android.view.View.OnTouchListener; 
import android.view.inputmethod.InputMethodManager; 

public class RedScorerFragment extends SherlockFragment { 

    LayoutInflater infl; 
    GridView mGrid; 

    EditText mText; 

    int R1C1, R1C2, R1C3; 

    View tView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     infl = inflater; 
     //super.onCreate(savedInstanceState); 
     View mView = inflater.inflate(R.layout.fragment_score_red, container, false); 
     mGrid = (GridView) mView.findViewById(R.id.gridViewRed); 

     tView = container.getRootView(); 


     final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(mView.getApplicationWindowToken(), 0); 

     /*mGrid.setOnTouchListener(new OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event){ 
       if(event.getAction() == MotionEvent.ACTION_MOVE) 
        return true; 
       return false; 
      } 
     });*/ 

     if(savedInstanceState != null) 
     { 
      R1C1 = savedInstanceState.getInt("R1C1"); 
      R1C2 = savedInstanceState.getInt("R1C2"); 
      R1C3 = savedInstanceState.getInt("R1C3"); 

      Log.d("savedd R1C1 ", String.valueOf(R1C1)); 
      Log.d("savedd R1C2 ", String.valueOf(R1C2)); 
      Log.d("savedd R1C3 ", String.valueOf(R1C3)); 
     } 


     mGrid.setAdapter(new ImageAdapter(getActivity())); 
     return mView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 

     if(savedInstanceState != null) 
     { 
      R1C1 = savedInstanceState.getInt("R1C1", 0); 
      R1C2 = savedInstanceState.getInt("R1C2", 0); 
      R1C3 = savedInstanceState.getInt("R1C3", 0); 

      Log.v("saved R1C1 ", String.valueOf(R1C1)); 
      Log.v("saved R1C2 ", String.valueOf(R1C2)); 
      Log.v("saved R1C3 ", String.valueOf(R1C3)); 
     } 

     //Log.v("saved R1C1 ", String.valueOf(R1C1)); 
     //Log.v("saved R1C2 ", String.valueOf(R1C2)); 
     //Log.v("saved R1C3 ", String.valueOf(R1C3)); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState){ 
     super.onSaveInstanceState(savedInstanceState); 

     //for(int i=0;i<mGrid.getChildCount(); i++) 
     Log.v("Saving", String.valueOf(mGrid.getAdapter().getItem(0))); 

     //Log.v("Saving", mGrid.getItemAtPosition(2).toString()); 
     Integer temp = (Integer) mGrid.getAdapter().getItem(0); 
     int temp2; 
     if(temp != null) 
     { 
      temp2 = temp; 
      Log.v("temp2", String.valueOf(temp2)); 
      savedInstanceState.putInt("R1C1", temp2); 
     } 
     else 
      Log.v("temp2", "Temp was null"); 

     mText = (EditText)tView.findViewById(R.id.weightedRed__red); 
     Log.d("weighted Red", mText.getText().toString()); 

     EditText oText = (EditText)tView.findViewById(R.id.grid_item_edit_text_red); 
     Log.d("red edit text", oText.getText().toString()); 

     EditText lText = (EditText)tView.findViewById(R.id.grid_item_edit_text_blue); 
     Log.d("blue edit text", lText.getText().toString()); 

     //savedInstanceState.putInt("R1C2", (Integer) mGrid.getAdapter().getItem(4)); 
     //savedInstanceState.putInt("R1C3", (Integer) mGrid.getAdapter().getItem(2)); 

    } 

    public class ImageAdapter extends BaseAdapter{ 

     Context context; 

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


     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      View myView = convertView; 
      //LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      if(convertView == null) 
      { 
       LayoutInflater li = infl; 
       myView= li.inflate(R.layout.grid_items, null); 

       EditText editText = (EditText) myView.findViewById(R.id.grid_item_edit_text_red); 
      } 

      return myView; 
     } 

     @Override 
     public int getCount() { 
      return 9;//only 9 
     } 

     @Override 
     public Object getItem(int position) { 

      return null; 
     } 

     @Override 
     public long getItemId(int position) { 

      return 0; 
     } 


    } 


} 

RedScorerFragment.java 스택 오버플로 오류가 발생합니다.

+0

기본적으로 'EditText's'에는 값이 있습니까? –

+0

아니요 그 안에 뭔가를 입력 한 다음 닫을 때 입력 된 값을 저장합니다 – rasen58

답변

2

TextWatchers뿐만 아니라, 당신은 단순히 다음 경우 배열에 모든 Editexts을 추가 할 수 그 (것)들에서 당신의 원본을 필요로하면, 당신은 단순히 배열을 통해 순환하고 모두에 getText().toString();를 부를 수 있었다.

+0

감사합니다! 그것은 – rasen58

+0

문제가 없습니다. 다행히 도왔다. – mango

4

이것이 절대적이고 정교한 솔루션이라면 나는 기분이 좋지 않지만 모든 TextView의 값 컨테이너 (데이터 집합과 같은)를 어댑터에 추가하려고 할 수 있습니다 (보통 ArrayList 일 수도 있고 비슷할 수도 있음).).

mEditText.addTextChangedListener(new TextWatcher() {...}); 

을 그리고 목록 항목의 값 EditText 값이 변경 될 때마다 변경 :

그런 다음 모든 EditTextTextWatcher을 설정합니다.

onSaveInstanceState() 방법은 어댑터에서 값을 검색하는 것입니다.

나머지는 간단하다고 생각합니다.

편집 (그냥 명확하게하기 위해)

어댑터해야 유사한 행운 뭔가를해야만 :

public class MyAdapter extends BaseAdapter { 
// All the fancy stuff 
List<String> dataset; 

    @Override 
    public View getView(...) { 
     //... othe code 
     mEditText.addTextChangedListener(new MyTextWatcher(position)); 
    } 

private class MyTextWatcher implements TextWatcher { 

    int index; 

    public MyTextWatcher(int index) { 
     this.index = index; 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     dataset.set(index, s.toString()); 
    } 

} 
} 
+0

'텍스트 관찰자'를 추가하기 위해 어떻게 모든 '텍스트 편집'을받을 수 있습니까? – rasen58

+0

나는 그것을 이렇게 보았습니다 : 감시자 한 명을 추가하고보기 위치의 트릭을 유지하십시오 ... –

+0

다른 답변의 방법을 사용하여 고마워했습니다. – rasen58

관련 문제