2011-12-29 26 views
2

私はAndroidにはかなり新しく、GridViewで遊んでいます。 GridViewの個々の要素から文字列を取得しようとしていますが、ユーザーが行った変更に基づいて状態を保存できるようになりました。Android - グリッドビューの特定の要素から文字列を取得

私はこの質問のために何をしようとしているのストリップダウンバージョンアップ嘲笑しました:グリッド内の各要素のビューがTextViewに、以下で定義されるのEditTextで構成されて

XMLファイル。 grid_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:id = "@+id/single_item_id"   
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    android:orientation="vertical" 
> 
    <TextView 
     android:id = "@+id/label" 
     android:layout_width = "fill_parent"    
     android:layout_height="wrap_content" 
     android:inputType="text"> 
    </TextView> 
    <EditText 
     android:id = "@+id/item_value" 
     android:layout_width = "fill_parent"    
     android:layout_height="wrap_content" 
     android:inputType="text"> 
    </EditText>  
</LinearLayout> 

マイmain.xml、ボタンやGridViewのからなる:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/editbutton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="onRetrieveButtonClick" 
      android:text="@string/get" android:clickable="true"/> 

     <GridView 
      android:id="@+id/gridview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:numColumns="auto_fit" 
      android:verticalSpacing="10dp" 
      android:horizontalSpacing="10dp" 
      android:columnWidth="250dp" 
      android:stretchMode="columnWidth" 
      android:gravity="center" 
      android:paddingTop="50dp"> 
     </GridView> 

    </LinearLayout> 

マイActivityクラス:

package com.jdev.simplegrid; 

    import java.util.ArrayList; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.GridView; 
    import android.widget.Toast; 

    public class SimpleGridActivity extends Activity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      GridView gridview = (GridView) findViewById(R.id.gridview); 

      //Some hard-coded sample data -each person has a birth-name and a nickname 
      ArrayList<Person> people = new ArrayList<Person>(); 
      people.add(new Person("David","Dave")); 
      people.add(new Person("Bruce","Batman")); 
      people.add(new Person("John","J")); 

      gridview.setAdapter(new SimpleAdapter(this, people)); 
     } 

     public void onRetrieveButtonClick(View view) 
     { 
      Toast.makeText(getBaseContext(), "Get the String value of EditText at position 1 of the gridview e.g Batman", Toast.LENGTH_LONG).show(); 
      //Get the String value of EditText at position 1 of the gridview. e.g Batman 
     } 
    } 

そして最後にビューのための私のアダプタ:

package com.jdev.simplegrid; 

    import java.util.ArrayList; 

    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.BaseAdapter; 
    import android.widget.EditText; 
    import android.widget.TextView; 

    public class SimpleAdapter extends BaseAdapter { 
     private Context mContext; 
     private ArrayList<Person> personList; 

     public SimpleAdapter(Context c, ArrayList<Person> people) { 
      mContext = c; 
      personList = people; 
     } 

     public int getCount() { 
      return personList.size(); 
     } 

     public Person getItem(int position) { 
      return personList.get(position); 
     } 

     public long getItemId(int position) { 
      return 0; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View view=inflater.inflate(R.layout.grid_item, parent, false); 

      TextView birthnameLabel=(TextView)view.findViewById(R.id.birthname); 
      birthnameLabel.setText(personList.get(position).getBirthname()); 

      EditText nicknameText=(EditText)view.findViewById(R.id.nickname); 
      nicknameText.setText(personList.get(position).getNickname()); 

      return view; 
     } 


    } 

だから私のq質問は、ボタンをクリックしてgridviewから値を取得するにはどうすればいいですか?グリッドビューの位置1のEditTextの値 "Batman"と言ってください。 私は本当にここに何かを見逃しているように感じる!

答えて

2
​​

これはあなたが探しているものですか? あなたのPersonオブジェクトがもちろんニックネームのゲッターメソッドを持っていると仮定します。 - 申し訳ありませんが、私はあなたのカスタムアダプターでそれを見ることができました。

EditTextでニックネームを変更できるというアイディアがあれば、それぞれにTextChangedListener(TextWatcher)を追加し、編集後にその位置に関連付けられたPersonオブジェクトのニックネームを更新することができます。グリッド;例えばsetNickname(String)メソッドの助けを借りて。

これについて考える最も簡単な方法は、おそらく「モデル」と「ビュー」の観点です。 TextViewsとEditTextsはビューですが、アダプターのPersonオブジェクトはモデルです。データを変更したい場合は、いくつかのロジックを使って基礎となるモデルを修正し、その後にビューを更新/更新するだけです。

+0

ありがとう、私は今、私は完全に背中合わせに考えていたことを認識しています。 – FinalStraw88

関連する問題