gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:42:10 26 4
gpt4 key购买 nike

我是 Android 的新手,我一直在研究 GridView。我一直在尝试从 GridView 的各个元素中检索字符串,以便我可以根据用户所做的更改保存状态。

我模拟了一个精简版的我正在尝试为这个问题做的事情:

grid中每个元素的view由一个TextView和一个EditText组成,由下面的xml文件定义;网格项目.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
}
}

最后是我的 View 适配器:

    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 中检索 a 值。在 GridView 的位置 1 的 EditText 中说出值“ bat 侠”。我觉得我真的在这里错过了什么!

最佳答案

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

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

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

考虑这一点的最简单方法可能是根据“模型”和“ View ”。 TextViews 和 EditTexts 是 View ,而适配器中的 Person 对象是模型。如果您想对数据进行任何更改,请使用一些逻辑修改底层模型,然后简单地更新/刷新 View 。

关于Android - 从 gridview 的特定元素检索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com