Android 无法从自定义listView获取EditText值

Android 无法从自定义listView获取EditText值,android,listview,Android,Listview,对不起,我不知怎么的不能对答案发表评论,所以我必须在这里写我自己的 我需要从自定义ListView(由EditText和ImageView组成)获取字符串数据。 这是我的密码: 首先,我声明我自己的ArrayList副本 private ArrayList m_edit=null 其次,我在活动的onCreate方法中初始化它 public void onCreate(Bundle savedInstanceState){ … m_edit=new ArrayList(); … 第三,我用Edi

对不起,我不知怎么的不能对答案发表评论,所以我必须在这里写我自己的

我需要从自定义ListView(由EditText和ImageView组成)获取字符串数据。 这是我的密码:

  • 首先,我声明我自己的ArrayList副本

    private ArrayList m_edit=null

  • 其次,我在活动的onCreate方法中初始化它

    public void onCreate(Bundle savedInstanceState){
    …
    m_edit=new ArrayList(); …

  • 第三,我用EditText副本填充ArrayList,然后使用ArrayAdapter将它们添加到ListView

    fieldAddButton.setOnClickListener(new OnClickListener()
    {
        public void onClick(View view){
            EditText et = new EditText(AddCategory.this);    
            m_edit.add(et);
            m_adapter.notifyDataSetChanged();   
            }
        });   
    
  • 第四,我想为自定义ListView中的任何项目获取EditText值。因此,我执行以下操作:

                for (int i = 0;i<m_edit.size();i++){
                _string = m_edit.get(i).getText().toString();
                }
    

    for(int i=0;i您可以提供代码片段,以便更清楚地了解如何使用edittext Arraylist。
    
    由此我可以看出,您正在arraylist中添加edittext并刷新您的listview。但是您的listview是否使用添加的edittext进行了刷新?那么这就是您的代码的主要问题。

    感谢您提供的源代码

    我认为您使用的是listview,单击按钮时您试图获取edittext值。但您如何知道从listview中选择了哪个位置视图


    我认为你的要求和所做的都有问题。我认为你所做的是单击一个按钮,然后尝试获取所有edittext值。

    从下面的代码中,我猜你从
    ArrayList
    而不是
    edittext
    字段中获取文本是错误的

    m_edit = new ArrayList<EditText>();
    for (int i = 0;i<m_edit.size();i++) {
        _string = m_edit.get(i).getText().toString();
    }
    

    您得到的是空白值,因为在listview中您没有编辑它。您可以这样做

    在适配器getview方法中放入以下代码

    public View getView(final int position, View convertView, ViewGroup parent) {
    
      ed.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    list.get(position).edittext.setText(ed.getText().toString())
                }
            });
    }
    

    希望这能对您有所帮助。

    单击fieldAddButton之后,您将只获得editText值。顺便说一句,您将其称为for loop。我已经编辑了我的帖子并添加了hole源代码。希望它能帮助您。谢谢。我需要做的是将我的ListView的所有editText值保存在数据库表中。为此,我尝试使用ArrayList来存储所有的Edi从我的ListView中读取文本。然后从中读取数据。但是我有一个问题:我不知道,如果ListView中有任何更改(例如,用户输入了一些文本),如何更新ArrayList。诸如此类。谢谢
    final ListView fieldList = (ListView)findViewById(R.id.CategoryFieldList);
    
    fieldList.setOnItemClickListener(new OnItemClickListener()  {
    @Override
    public void onItemClick(AdapterView<?> listView, View view, 
     int position, long id) {
    
     EditText et = (EditText)v.findViewById(R.id.fieldEdit);
     String myText = et.getText().toString();
    
     Toast.makeText(getApplicationContext(), myText , Toast.LENGTH_SHORT).show();
    
    }
    });
    
    public View getView(final int position, View convertView, ViewGroup parent) {
    
      ed.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    list.get(position).edittext.setText(ed.getText().toString())
                }
            });
    }