Android 如何从动态创建的EditText视图中获取数据并将其插入数组?
因此,基本上我需要我的程序在这一点上做的是,当我单击submit按钮时,我需要在ListView的每个动态行中循环,获取EditText视图中的值,然后将其插入数组中,之后我将进行进一步的计算。这是我的密码Android 如何从动态创建的EditText视图中获取数据并将其插入数组?,android,loops,android-widget,android-arrayadapter,Android,Loops,Android Widget,Android Arrayadapter,因此,基本上我需要我的程序在这一点上做的是,当我单击submit按钮时,我需要在ListView的每个动态行中循环,获取EditText视图中的值,然后将其插入数组中,之后我将进行进一步的计算。这是我的密码 package com.hello_world; import java.util.ArrayList; import com.hello_world.ByteInputActivity.MyAdapter.ViewHolder; import android.app.Activity
package com.hello_world;
import java.util.ArrayList;
import com.hello_world.ByteInputActivity.MyAdapter.ViewHolder;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class ByteInputActivity extends Activity {
private ListView myList;
private MyAdapter myAdapter;
private Integer resQuestions;
private Integer indexVal = 0;
private View caption;
ViewHolder holder;
ArrayList<Integer> intArrayList = new ArrayList<Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fieldlist);
//Gets number of questions from MainActivity
Bundle extras = getIntent().getExtras();
if(extras !=null) {
resQuestions = extras.getInt("index");
}
myList = (ListView) findViewById(R.id.FieldList);
myList.setItemsCanFocus(true);
myAdapter = new MyAdapter();
myList.setAdapter(myAdapter);
Button submit = (Button) findViewById(R.id.btn_New);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < myList.getCount() ; i++) {
View vListSortOrder;
vListSortOrder = myList.getChildAt(i);
String temp = holder.caption.getText().toString();
Log.e("VALUES", "" +temp);
}
}
});
}
public class MyAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public ArrayList myItems = new ArrayList();
public MyAdapter() {
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < resQuestions; i++) {
ListItem listItem = new ListItem();
listItem.caption = "Index " + i;
listItem.indexText = "Index " + i;
myItems.add(listItem);
indexVal += 1;
}
notifyDataSetChanged();
}
public int getCount() {
return myItems.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item, null);
holder.indexText = (TextView) convertView .findViewById(R.id.textView1);
holder.caption = (EditText) convertView .findViewById(R.id.ItemCaption);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//Fill EditText with the value you have in data source
holder.caption.setText("");
holder.caption.setId(position);
holder.indexText.setText("Index " + position);
holder.indexText.setId(position);
//we need to update adapter once we finish with editing
holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
final int position = v.getId();
final EditText Caption = (EditText) v;
myItems.set(position, Caption.getText().toString());
}
}
});
return convertView;
}
class ViewHolder {
EditText caption;
TextView indexText;
}
class ListItem {
String caption;
String indexText;
}
}
}
package com.hello\u world;
导入java.util.ArrayList;
导入com.hello_world.ByteInputActivity.MyAdapter.ViewHolder;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnFocusChangeListener;
导入android.view.view.OnKeyListener;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
公共类ByteInputActivity扩展了活动{
私有列表视图myList;
私有MyAdapter MyAdapter;
私人整数问题;
私有整数indexVal=0;
私有视图标题;
视窗座;
ArrayList intArrayList=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fieldlist);
//获取MainActivity中的问题数
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
resQuestions=extras.getInt(“索引”);
}
myList=(ListView)findViewById(R.id.FieldList);
myList.setItemsCanFocus(true);
myAdapter=新的myAdapter();
myList.setAdapter(myAdapter);
按钮提交=(按钮)findViewById(R.id.btn\u新);
submit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
对于(int i=0;i
这就是我要做的:
从更改以下内容开始:
public ArrayList myItems = new ArrayList();
为此:
public HashMap<Integer, String> myItems = new HashMap<Integer, String>();
并修改getItem(int位置):
对于测试解析,您可以使用如下内容:
@Override
public void onClick(View v) {
for (int i = 0; i < myList.getCount() ; i++) {
String item = (Strng) myAdapter.getItem(position);
Log.e("VALUES", "" +item);
}
}
@覆盖
公共void onClick(视图v){
对于(int i=0;i
尚未测试代码,请告诉我它是如何工作的,以便在需要时可以更正。首先,我不确定这是如何工作的:
//we need to update adapter once we finish with editing
holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
final int position = v.getId();
final EditText Caption = (EditText) v;
myItems.set(position, Caption.getText().toString());
}
}
});
如果尝试创建ListItem对象的ArrayList,则应执行以下操作:
//we need to update adapter once we finish with editing
holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
//final int position = v.getId();
//final EditText Caption = (EditText) v;
ListItem litem = new ListItem();
litem.caption = holder.caption.getText().toString();
myItems.set(position, litem);
}
}
});
然后,从“提交”按钮的OnClickListener,您可以执行以下操作:
submit.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
ViewHolder holder;
for(int i = 0; i < myList.getAdapter().getCount(); i++)
{
holder = (ViewHolder) myList.getAdapter().getItem(i);
String temp = holder.caption.getText().toString();
Log.e("VALUES", "" + temp);
}
}
});
submit.setOnClickListener(新的OnClickListener()
{
公共void onClick(视图v)
{
视窗座;
对于(int i=0;i
是的,这是一个代码。它做错什么了吗?如果不是的话,它在做什么不是你想要的?您试图解决这些问题中的任何一个?现在的问题是,当我单击按钮时,它将仅在我的ListView中显示上一个EditText视图中的值。我需要循环遍历ListView的每一行,并从循环所在行的EditText视图中获取特定的数据
//we need to update adapter once we finish with editing
holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
//final int position = v.getId();
//final EditText Caption = (EditText) v;
ListItem litem = new ListItem();
litem.caption = holder.caption.getText().toString();
myItems.set(position, litem);
}
}
});
submit.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
ViewHolder holder;
for(int i = 0; i < myList.getAdapter().getCount(); i++)
{
holder = (ViewHolder) myList.getAdapter().getItem(i);
String temp = holder.caption.getText().toString();
Log.e("VALUES", "" + temp);
}
}
});