【问题标题】:How to get EditText Text inside ListView如何在 ListView 中获取 EditText 文本
【发布时间】:2014-06-13 18:33:23
【问题描述】:

我在 20 行的 ListView 中有一个 EditText。我想要单击按钮时所有 Edittext 文本的文本。应用程序崩溃,点击按钮时出现 NullPointerException 错误。这为前 11 行提供了值。之后它崩溃了,因为我认为这是向下滚动的视图。

完整的适配器代码

  @SuppressLint("NewApi") public class CustomAdapter extends BaseAdapter   implements OnClickListener {

/*********** Declare Used Variables *********/
 private Activity activity;
 private ArrayList data;
 private static LayoutInflater inflater=null;
 public Resources res;
 ListModel tempValues=null;
 int i=0;

int j=0;

public ArrayList<String> selectedStrings = new ArrayList<String>();


/*************  CustomAdapter Constructor *****************/
public CustomAdapter(Activity a, ArrayList d,Resources resLocal) {

    /********** Take passed values **********/
    activity = a;
    data=d;
    res = resLocal;

    /***********  Layout inflator to call external xml layout () **********************/
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

/******** What is the size of Passed Arraylist Size ************/
public int getCount() {

    if(data.size()<=0)
        return 1;
    return data.size();
}

public Object getItem(int position) {
    return data.get(position);
}


public long getItemId(int position) {
    return 0;
}

/********* Create a holder to contain inflated xml file elements ***********/
public static class ViewHolder{

    public TextView text;
    public TextView text1;
    public EditText text2;
    public TextView textWide;
    public ImageView image;
    public CheckBox check;

}

  public View getView(int position, View convertView, ViewGroup parent) {



    View vi=convertView;
    final ViewHolder holder;

    if(convertView==null){ 

        /********** Inflate tabitem.xml file for each row ( Defined below ) ************/
        vi = inflater.inflate(R.layout.tabitem, null); 

        /******** View Holder Object to contain tabitem.xml file elements ************/
        holder=new ViewHolder();
        holder.text=(TextView)vi.findViewById(R.id.textView1);

        holder.check =(CheckBox)vi.findViewById(R.id.checkBox1);
                holder.text2=(EditText)vi.findViewById(R.id.editText1);



       holder.check.setOnClickListener(new OnClickListener(){

           @Override
             public void onClick(View v) 
             {
                 if (((CheckBox) v).isChecked()) 
                 {
                     holder.text2.setText("Checked");


                 }
                 else
                 {
                     holder.text2.setText("Not Checked");

                 }
             }
        });

        vi.setTag(holder);



        j++;

        if(j<8){
       holder.text2.setVisibility(View.INVISIBLE);
       holder.check.setX(-150);
       holder.check.setVisibility(View.VISIBLE);

        }else
        {
             holder.check.setVisibility(View.INVISIBLE);
             holder.text2.setVisibility(View.VISIBLE);

        }



    }
    else  
        holder=(ViewHolder)vi.getTag();

    holder.text2.getText();
      if(data.size()<=0)
    {
        holder.text.setText("No Data");

        holder.text2.getText();

    }
    else
    {
        /***** Get each Model object from Arraylist ********/
        tempValues=null;
        tempValues = (ListModel) data.get(position);

        /************  Set Model values in Holder elements ***********/
         holder.text.setText(tempValues.getCompanyName());

         vi.setOnClickListener(this);        }

             return vi;
}

@Override
public int getViewTypeCount() {
    return getCount();
}


@Override
public int getItemViewType(int position) {
   return position; 
}


@Override
public void onClick(View v) {
        Log.v("CustomAdapter", "=====Row button clicked");
 TextView tv = (TextView)v.findViewById(R.id.textView1);
   int pos = (Integer)tv.getTag();
   Log.d("position of clicked item is", ""+pos);

}

/********* Called when Item click in ListView ************/
private class OnItemClickListener  implements OnClickListener{           
    private int mPosition;

    OnItemClickListener(int position){
         mPosition = position;
    }

    @Override
    public void onClick(View arg0) {
        CustomListViewAndroidExample sct = (CustomListViewAndroidExample)activity;
        sct.onItemClick(mPosition);
    }               
}   

}

按钮点击事件 在 11 行后失败..

 Button button =(Button)findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

for (int i=0;i< 20;i++ ){
         View vListSortOrder;
         vListSortOrder=list.getChildAt(i);     

         EditText edit=(EditText)vListSortOrder. findViewById(R.id.editText1);
        String temp1223=edit.getText().toString();}

日志

 04-28 03:33:23.542: E/AndroidRuntime(4917): FATAL EXCEPTION: main
 04-28 03:33:23.542: E/AndroidRuntime(4917): java.lang.NullPointerException
 04-28 03:33:23.542: E/AndroidRuntime(4917):    at com.androidexample.customlistview.CustomListViewAndroidExample$1.onClick(CustomListViewAndroidExample.java:89)
 04-28 03:33:23.542: E/AndroidRuntime(4917):    at android.view.View.performClick(View.java:4240)
 04-28 03:33:23.542: E/AndroidRuntime(4917):    at android.view.View$PerformClick.run(View.java:17721)
04-28 03:33:23.542: E/AndroidRuntime(4917):     at android.os.Handler.handleCallback(Handler.java:730)

【问题讨论】:

  • 请添加您的日志崩溃
  • The App gets crash giving the NullPointerException Error on clicking of the button. 在哪里?
  • @SacreDeveloper 请检查
  • @GrIsHu 它的行 EditText 编辑 =(EditText)vListSortOrder。 findViewById(R.id.editText1);在第 11 行
  • 从您的代码中删除这一行并尝试,if(convertView==null){

标签: android listview android-listview android-edittext android-listfragment


【解决方案1】:

使用 vListSortOrder=list.getAdapter().getView(i, null, null);

代替 vListSortOrder=list.getChildAt(i);

谢谢

【讨论】:

    【解决方案2】:

    您必须存储editext的内容和其他信息以在模型的列表视图中显示,并创建该模型的arraylist。这有助于您在滚动时保持列表项状态并获得正确的内容。

    然后在按钮上单击从该模型的arraylist 中获取内容...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多