2

私はAndroidにはかなり慣れていないので、GridViewで遊んでいます。ユーザーが行った変更に基づいて状態を保存できるように、GridView の個々の要素から文字列を取得しようとして行き詰まりました。

この質問のために私がやろうとしていることの簡素化されたバージョンをモックアップしました:

グリッド内の各要素のビューは、次の xml ファイルで定義された TextView と EditText で構成されます。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:

    <?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>

私の活動クラス:

    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;
        }


    }

だから私の質問は、ボタンをクリックしてグリッドビューから値を取得する方法です。グリッドビューの位置 1 にある EditText の値を「Batman」と言います。ここで本当に何かが足りない気がします!

4

1 に答える 1