2013-01-07 6 views
0

나는 edittext로 채워진 격자보기를 가지고 있습니다. 사용자가 버튼을 누를 때, 나는 edittexts에 저장된 모든 값을 가져오고 싶지만 처음의 값만 되돌립니다.안드로이드 격자보기의 첫 번째 값만 반환됩니다.

그리드보기는 fragment_score.xml에 있습니다.

그리드 뷰 grid_items.xml

<EditText 
    android:id="@+id/grid_item_edit_text_red" 
    android:inputType="number" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 


    /> 

<EditText 
    android:id="@+id/grid_item_edit_text_blue" 
    android:inputType="number" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 

    /> 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 


import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.view.MenuInflater; 
import com.actionbarsherlock.view.Menu; 

import android.content.Context; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
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 RedFragment extends SherlockFragment { 


LayoutInflater infl; 
GridView mGrid; 

String[] etCollection = new String[9]; 


ImageAdapter adapter; 

View mView; 


Context mContext; 
Button calc;  

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    System.out.println("onCreateView called"); 
    infl = inflater; 
    //super.onCreate(savedInstanceState); 
    super.onCreateView(inflater, container, savedInstanceState); 
    mView = inflater.inflate(R.layout.fragment_score, container, false); 
    mGrid = (GridView) mView.findViewById(R.id.gridViewRed); 

    setHasOptionsMenu(true); 

    //tView = container.getRootView(); 
    mContext = mView.getContext(); 

    for(int j=0;j<9;j++) 
    { 
     etCollection[j] = "-1"; 
    } 




    adapter = new ImageAdapter(mContext); 
    mGrid.setAdapter(adapter); 
    Log.e("debug", "here2"); 
    calc = (Button)mView.findViewById(R.id.calc_red); 

    calc.setOnTouchListener(new OnTouchListener(){ 
     @Override 
     public boolean onTouch(View v, MotionEvent event){ 
      calculate(); 
      return true; 

     } 
    }); 


    return mView; 
} 







public void getGridVals(){ 

    Log.v("vals", "Getting grid Vals()"); 

    for(int i=0;i<9;i++) 
    { 
     EditText tempText1 = (EditText)mView.findViewById(R.id.grid_item_edit_text_red); 
     Log.v("temp text ", "." + tempText1.getText().toString()); 
        //this should update etCollection[] 
     adapter.getView(i, mView, null); 
      //this always prints the value stored in the first textview 
     Log.d("etCollection", etCollection[i]); 



    } 



} 

public void setGridVals(int i, String val){ 

    etCollection[i] = val; 


} 


public void calculate(){ 
    int[][] pegs = new int[3][3]; 
    getGridVals(); 
} 



public class ImageAdapter extends BaseAdapter{ 

    Context context; 




    public ImageAdapter(Context context) 
    { 
     this.context = context; 
     etCollection = new String[getCount()]; 

    } 


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

     View myView = convertView; 


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


     } 
      /////////////////////////////// 
     //this seems to always return the value in the first R.id.grid_item_edit_text_red 
     EditText editText = (EditText) myView.findViewById(R.id.grid_item_edit_text_red); 
     etCollection[position] = editText.getText().toString(); 

     return myView; 
    } 

    @Override 
    public int getCount() { 

     return 9; 
    } 



    @Override 
    public Object getItem(int position) { 
     Log.w("etCollection: " + position , etCollection[position]); 
     return etCollection[position]; 
    } 

    @Override 
    public long getItemId(int position) { 

     return 0;//mGrid.getItemIdAtPosition(position); 
    } 


} 

}

답변

0

내가 편집 텍스트에 텍스트 전문가를 사용하여 실제로있는 gridview 거기에

0

의 편집 텍스트 나는 안드로이드 초보자의 다소 여전히 해요 그러나 나는 생각한다 당신은 각 EditText를위한 id를 가지고 있어야하고 당신은 오직 정의했습니다.
따라서 (EditText)mView.findViewById(R.id.grid_item_edit_text_red)을 수행하면 매번 동일한 EditText가 반환됩니다.
이 조금 도움이 될 다음의 getView 방법에 문제가 http://developer.android.com/guide/topics/ui/layout/gridview.html

+0

의 배열을 업데이트하여 고정, 당신은 할 필요가 없습니다,하지만 난 것을 시도 제대로 – rasen58

0

이를 ... u는 문자열 를 얻기 위해 EDITTEXT를 팽창 레이아웃 인플레이터를 사용했다 그러나 유 EDITTEXT 인 알 필요로 데이터를 포함합니다

모든 문자열을 가져 오는 for 루프 문으로 이동하십시오.

실행 루프보기에 사용될 수 EDITTEXT .. 같은 루프

(edittext.gettext 경우()의 길이()> 0). 문자열 데이터 = edittext.gettext();

+0

을 값을받지 못했습니다 하지만 작동하지 않았다. – rasen58

관련 문제