簡體   English   中英

從ListView獲取Activity中EditText的值

[英]Getting value of EditText in Activity from ListView

我的LisiViewAdapter類是這個

public class ListViewAdapter3 extends BaseAdapter {
Activity context;

String productCode[];
String productName[];
String productType[];
String productPrice[];
String lastFourOrder[];
String productId[];

public ListViewAdapter3(Activity context, String productCode[],
        String productName[], String productType[], String productPrice[],
        String lastFourOrder[], String productId[]) {
    super();
    this.context = context;
    this.productCode = productCode;
    this.productName = productName;
    this.productType = productType;
    this.productPrice = productPrice;
    this.lastFourOrder = lastFourOrder;
    this.productId = productId;
}

public int getCount() {
    // TODO Auto-generated method stub
    return productName.length;
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

private class ViewHolder {
    TextView tvproductname;
    TextView tvproducttype;
    TextView tvproductunit;
    TextView tvproductprice;
    TextView tvproductorder;
    ImageView ivup1;
    ImageView ivdown1;
    EditText stepper_display;
    int defaultNumber = 0;
}

public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    final ViewHolder holder;

    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.collection2, null);
        holder = new ViewHolder();
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();

    }

    holder.tvproductname = (TextView) convertView
            .findViewById(R.id.tvproduct);
    holder.tvproducttype = (TextView) convertView
            .findViewById(R.id.tvprodtype);
    holder.tvproductunit = (TextView) convertView
            .findViewById(R.id.tvprodunit);
    holder.tvproductprice = (TextView) convertView
            .findViewById(R.id.tvprice);
    holder.tvproductorder = (TextView) convertView.findViewById(R.id.tvL40);
    holder.ivup1 = (ImageView) convertView.findViewById(R.id.ivup1);
    holder.ivdown1 = (ImageView) convertView.findViewById(R.id.ivdown1);
    holder.stepper_display = (EditText) convertView
            .findViewById(R.id.etorderqty);
    holder.stepper_display.setText("" + holder.defaultNumber);

    holder.ivup1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String s = holder.stepper_display.getText().toString();
            if (s.equals("0")) {
                holder.defaultNumber = 0;
                holder.defaultNumber++;
            } else {
                // decrem_btn.setClickable(true);
                holder.defaultNumber++;
            }
            holder.ivdown1.setClickable(true);

            String currentValue = Integer.toString(holder.defaultNumber);

            holder.stepper_display.setText(currentValue);

        }
    });

    holder.ivdown1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String s = holder.stepper_display.getText().toString();
            // System.out.println("s=====" + s);
            if (s.equals("0")) {
                // System.out.println("ffffffffffffffffffffffffffff");
                holder.ivdown1.setClickable(false);
                holder.defaultNumber = 0;
            } else {
                // decrem_btn.setClickable(true);
                holder.defaultNumber--;
            }

            if (holder.defaultNumber == 0) {
                holder.ivdown1.setClickable(false);
            }
            String currentValue = Integer.toString(holder.defaultNumber);

            holder.stepper_display.setText(currentValue);
        }
    });

    holder.tvproductname.setText(productName[position]);
    holder.tvproducttype.setText(productType[position]);
    holder.tvproductunit.setText("");
    holder.tvproductprice.setText(productPrice[position]);
    holder.tvproductorder.setText(lastFourOrder[position]);
    return convertView;
    }
}

在我的Activity類中,我得到了EditText的值

for (int i = 0; i < list.getAdapter().getCount(); i++) {
        View view = list.getChildAt(i);
        EditText editText = (EditText) view.findViewById(R.id.etorderqty);
        System.out.println(i+" A:"+editText.getText().toString());
        } 

清單的大小是5。 但是我沒有從所有EditText中獲取數據,我只得到了Edit Text的四個值。 沒有得到最后的價值。 請幫忙。

我認為您不應獲取此類數據。 data List放入適配器以存儲數據。 您應該知道,當滾動該列表視圖時,上部視圖將被重用,因此所有數據都將丟失。 您可能只有五個項目,但是使用數據列表存儲數據是一個很好的主意,可以使用從適配器中get data

在我們的for循環中,您只會得到四個元素,因為您的移動屏幕上可能只會顯示四個元素,或者移動屏幕只能顯示四個元素。 屏幕上其他元素仍未膨脹。 為此,您需要首先了解如何使用ADAPTER進行LISTVIEW的工作。

如果您將listView與適配器一起使用,則屏幕僅顯示四個(或作為屏幕容量的前一項),因為listView不會為傳遞給適配器的所有元素放置位置。 它為屏幕上顯示的元素留出空間。

上下滾動時,將為下一個元素和上一個元素存儲在RECYCLER中。

請通過適配器了解Listview的基本知識,您將了解其他適配器的工作原理。

希望你能理解。

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

使用此鏈接了解

終於得到了解決方案! 這是我的適配器類

public class ListViewAdapter3 extends BaseAdapter {
Activity context;
String productCode[];
String productName[];
String productType[];
String productPrice[];
String lastFourOrder[];
String productId[]; 
// Created String Array Here 
private final String[] valueList;
public ListViewAdapter3(Activity context, String productCode[],
        String productName[], String productType[], String productPrice[],
        String lastFourOrder[], String productId[]) {
    super();
    this.context = context;
    this.productCode = productCode;
    this.productName = productName;
    this.productType = productType;
    this.productPrice = productPrice;
    this.lastFourOrder = lastFourOrder;
    this.productId = productId;
   //initialization of array
    valueList = new String[productCode.length];
}

public int getCount() {
    // TODO Auto-generated method stub
    return productName.length;
}



public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public class ViewHolder {
    TextView tvproductname;
    TextView tvproducttype;
    TextView tvproductunit;
    TextView tvproductprice;
    TextView tvproductorder;
    TextView tvproductid;
    ImageView ivup1;
    ImageView ivdown1;
    EditText stepper_display;       
    int defaultNumber = 0;      
}
 @Override
  public int getItemViewType(int position) {
    return position;
}

@Override
public int getViewTypeCount() {
    return 500;
}
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    final ViewHolder holder;

    LayoutInflater inflater = context.getLayoutInflater();

    if (convertView == null) {
        //System.out.println("convertView Null ="+convertView);
        convertView = inflater.inflate(R.layout.collection2, null);
        holder = new ViewHolder();
        holder.tvproductname = (TextView) convertView.findViewById(R.id.tvproduct);
        holder.tvproducttype = (TextView) convertView.findViewById(R.id.tvprodtype);
        holder.tvproductunit = (TextView) convertView.findViewById(R.id.tvprodunit);
        holder.tvproductprice = (TextView) convertView.findViewById(R.id.tvprice);
        holder.tvproductorder = (TextView) convertView.findViewById(R.id.tvL40);
        holder.tvproductid = (TextView) convertView.findViewById(R.id.tvproductid);
        convertView.setTag(holder);

    } else {
        //System.out.println("convertView NOt Null ="+convertView);
        holder = (ViewHolder) convertView.getTag();

    }   


    holder.ivup1 = (ImageView) convertView.findViewById(R.id.ivup1);

    holder.ivdown1 = (ImageView) convertView.findViewById(R.id.ivdown1);

    holder.stepper_display = (EditText) convertView.findViewById(R.id.etorderqty);

    holder.stepper_display.setText("" + holder.defaultNumber);

    holder.ivup1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String s = holder.stepper_display.getText().toString();
            if (s.equals("0")) {
                holder.defaultNumber = 0;
                holder.defaultNumber++;
            } else {
                // decrem_btn.setClickable(true);
                holder.defaultNumber++;
            }
            holder.ivdown1.setClickable(true);
            holder.stepper_display.setText(Integer.toString(holder.defaultNumber));

        }

    });

    holder.ivdown1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String s = holder.stepper_display.getText().toString();
            // System.out.println("s=====" + s);
            if (s.equals("0")) {                    
                holder.ivdown1.setClickable(false);
                holder.defaultNumber = 0;
            } else {
                // decrem_btn.setClickable(true);
                holder.defaultNumber--;
            }

            if (holder.defaultNumber == 0) {
                holder.ivdown1.setClickable(false);
            }
            holder.stepper_display.setText(Integer.toString(holder.defaultNumber));

        }
    });

    holder.stepper_display.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) {
           //filled array here
           valueList[position] = s.toString();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    holder.tvproductname.setText(productName[position]);
    holder.tvproducttype.setText(productType[position]);
    holder.tvproductunit.setText("");
    holder.tvproductprice.setText(productPrice[position]);
    holder.tvproductorder.setText(lastFourOrder[position]);
    holder.tvproductid.setText(productId[position]);        
    return convertView;
}  

 // created method here 
 public String[] getValueList(){
        return valueList;
    }
}

活動課

String[] string = lv.getValueList();
            for (int i = 0; i < list.getAdapter().getCount(); i++) {
                    View v1 = getViewByPosition(i, list);
                    String editTextValue = string[i];
      }

public View getViewByPosition(int position, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (position < firstListItemPosition || position > lastListItemPosition ) {
        return listView.getAdapter().getView(position, null, listView);
    } else {
        final int childIndex = position - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
  }

從這里得到解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM