Android - 从gridview的特定元素中检索字符串

时间:2011-12-29 23:56:04

标签: android gridview view element data-retrieval

我对Android很新,我一直在玩GridView。我一直试图从GridView的各个元素中检索字符串,这样我就可以根据用户所做的更改来保存状态。

我已经嘲笑了我正在尝试为这个问题做的一个简化版本:

网格中每个元素的视图由TextView和由以下xml文件定义的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,包含一个按钮和一个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>

我的活动类:

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


    }

所以我的问题是,如何通过点击按钮从gridview中检索一个值。在gridview的第1位的EditText中输入值“Batman”。 我觉得我在这里真的错过了什么!

1 个答案:

答案 0 :(得分:2)

gridview.getAdapter().getItem(1).getNickname();

这就是你要找的东西吗? 假设你的Person对象当然有一个昵称的getter方法。 - 很抱歉,显然我可以在你的自定义适配器中看到它。

如果你的想法是用户可以在EditText中更改昵称,你可能想要为每个昵称添加一个TextChangedListener(TextWatcher)并在编辑后更新与之关联的Person对象上的昵称在网格中的位置;例如借助setNickname(String)方法。

最简单的思考方式可能是“模特”和“观点”。 TextViews和EditTexts是视图,而适配器中的Person对象是模型。如果要对数据进行任何更改,请使用某些逻辑修改基础模型,然后在此之后更新/刷新视图。