2017-12-19 23 views
0

私はアンドロイドのリストビューと編集テキストの専門家ではありません。しかし、私はこの問題に関していくつかの面倒な問題に悩まされています。 リストビューで値を取得していますが、Edittextに何かを入力し、の値をスクロールしてEditTextの位置を変更します。ここに私のコードです。 //製品クラススクロール中にedittextの値がリストビューに表示されない

public class products { 
    public String prod_sl; 
    public String prod_code; 
    public String product_name; 
    public String product_desc; 
    public String prod_qnty; 
    public String prod_uom; 
    public String prod_price; 
    boolean ShowName; 
    public products(String psl, String pcode,String Name, String Desc, String UOM) { 
     this.prod_sl = psl; 
     prod_code = pcode; 
     prod_qnty=""; 
     prod_price =""; 
     product_name=Name; 
     product_desc=Desc; 
     prod_uom =UOM; 
    } 
    /* public boolean isShowName() { 
     return ShowName; 
    } 
    public void setShowName(boolean showName) { 
     ShowName = showName; 
    }*/ 
    //sl 
    public String getSl() {   return prod_sl;  } 
    public void setSl(String psl) {   this.prod_sl = psl;  } 
//product code 
    public String getCode() {   return prod_code;  } 
    public void setCode(String pcode) {   this.prod_code = pcode;  } 
    //product Name 
    public String getName() {   return product_name;  } 
    public void setName(String product_name) {   this.product_name = product_name;  } 
    //product desc 
    public String getDesc() {   return product_desc;  } 
    public void setDesc(String product_desc) {   this.product_desc = product_desc;  } 
    //product UOM 
    public String getUom() {   return prod_uom;  } 
    public void setUom(String prod_uom) {   this.prod_uom = prod_uom;  } 
    // product quantity 

    public String getQnty() { 
     return prod_qnty;  } 
    public void setQnty(String prod_qnty) { 
     this.prod_qnty = prod_qnty;  } 
//product price 
    public String getPrice() { 
     return prod_price;  } 
    public void setPrice(String prod_price) { 
     this.prod_price = prod_price;  } 

} 

そしてここアダプタクラス

public class ListViewAdapter extends ArrayAdapter<products> { 

    Context mContext; 
    View v; 
    private String[] arrTemp; 
    LayoutInflater inflater; 

    ArrayList<products> arrayproducts; 
    public String[] scoresToUpdate=new String[1000]; 
    //public String Array scoresToUpdate =scoresToUpdate[]; 
    public static EditText edit_qnty,prod_price; 
    public static HashMap<Integer,String> myList=new HashMap<Integer,String>(); 
    public ListViewAdapter(Context context, int resource, ArrayList<products> arrayproducts) { 
     super(context, resource); 
     this.mContext = context; 
     this.arrayproducts = arrayproducts; 
     this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 

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

      final int pos=position; 
      final ViewHolder holder; 
      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.list_adapter_view, null); 
       holder = new ViewHolder(); 
       holder.prod_sl = (TextView) convertView.findViewById(R.id.prod_sl); 
       holder.prod_code = (TextView) convertView.findViewById(R.id.prod_code); 
       holder.txtTitle = (TextView) convertView.findViewById(R.id.adapter_text_title); 
       holder.txtDescription = (TextView) convertView.findViewById(R.id.adapter_text_description); 
       holder.prod_uom = (TextView) convertView.findViewById(R.id.prod_uom); 
       holder.prod_qnty = (EditText) convertView.findViewById(R.id.prod_qnty); 
       holder.prod_price = (EditText) convertView.findViewById(R.id.prod_price); 
       // edit_qnty = (EditText) convertView.findViewById(R.id.prod_qnty); 


       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
       // holder.prod_qnty.setText(scoresToUpdate[pos]); 
      } 
       holder.ref = position; 

       products prod = arrayproducts.get(position); 
       holder.prod_sl.setText("" + position); 
       holder.prod_code.setText(prod.getCode()); 
       holder.txtTitle.setText(prod.getName()); 
       holder.txtDescription.setText(prod.getDesc()); 
       holder.prod_uom.setText(prod.getUom()); 
       Log.e("row values",""+position+"\t-"+prod.getCode()+""+prod.getName()+""+prod.getDesc()+""+prod.getUom()); 
       // holder.prod_qnty.setText(arrTemp[position]); 

       holder.prod_qnty.setText(scoresToUpdate[position]); 
       holder.prod_qnty.addTextChangedListener(new TextWatcher() { 

        @Override 
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
         // TODO Auto-generated method stub 
         arrayproducts.get(pos).setQnty(holder.prod_qnty.getText().toString().trim()); 
         myList.put(pos,arg0.toString().trim()); 
         if (!arg0.equals("0")){ 
         scoresToUpdate[pos] = arg0.toString(); 
          Log.e("On text Change","Pos"+pos+"\tqnty:"+holder.prod_qnty.getText().toString().trim()+"\t Args: "+arg0.toString()); 
         } 
        } 

        @Override 
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
                int arg3) { 
         // TODO Auto-generated method stub 

        } 

        @Override 
        public void afterTextChanged(Editable arg0) { 
         // TODO Auto-generated method stub 
         Log.e("After Text change","Pos"+holder.ref+"\tqnty:"+holder.prod_qnty.getText().toString().trim()); 
         // arrTemp[holder.ref] = arg0.toString(); 

        } 
       }); 
      //holder.prod_qnty.setText(myList.get(position)); 

       holder.prod_qnty.setOnTouchListener(new View.OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        // TODO Auto-generated method stub 

        Log.e("Current Qnty",edit_qnty.getText().toString().trim()); 
        if(holder.prod_qnty.getText().toString().trim().equals("0")){ 

         holder.prod_qnty.setText(""); 
        } 
        String inttext = (""+holder.prod_qnty.getText().toString().trim()); 

        if (!inttext.equals("0")){ 
         holder.prod_price.setText(""); 
        } 

        return false; 
        //return true; 
       } 
      }); 



      //Using setOnclickListener not setOnCheckedChangeListener 
      //we need to update adapter once we finish with editing 

      /* holder.prod_qnty.setOnFocusChangeListener(new View.OnFocusChangeListener() { 

      public void onFocusChange(View v, boolean hasFocus) { 

       if (!hasFocus) { 
       final int pos = v.getId(); 
       final EditText Qnty = (EditText) v; 
       Log.e("Qnty For the positon","POS: "+pos+"\tQnty: "+Qnty.getText().toString().trim()); 
       arrayproducts.get(pos).setQnty(Qnty.getText().toString().trim()); 
       //holder.prod_qnty.setText(Caption.getText().toString().trim()); 
       } 

       } 

      });*/ 
      /* holder.prod_price.setOnFocusChangeListener(new View.OnFocusChangeListener() { 

      public void onFocusChange(View v, boolean hasFocus) { 

       if (!hasFocus) { 
       final int position = v.getId(); 
       final EditText Caption = (EditText) v; 
       arrayproducts.get(position).setPrice(Caption.getText().toString().trim()); 
       } 

      } 

      }); 
*/ 
      return convertView; 

     } 
     catch(Exception e){ 
      Toast.makeText(mContext, "!!!", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
      Log.e("Exception:",""+e.toString()); 
     } 
     return convertView; 
    } 
/* @Override 

    public int getCount() { 

     return arrayproducts.size(); 

    }*/ 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     if(arrayproducts != null && arrayproducts.size() != 0){ 
      return arrayproducts.size(); 
     } 
     return 0; 
    } 

    /*@Override 
    public Objects getItem(int position) { 
     // TODO Auto-generated method stub 
     return arrayproducts[position]; 
    }*/ 

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


    public void getQnty(){ 
     if(edit_qnty.getText().toString().trim().equals("0")) 
     edit_qnty.setText(""); 

    } 
    static class ViewHolder { 
     TextView prod_sl; 
     TextView prod_code; 
     TextView txtTitle; 
     TextView txtDescription; 
     TextView prod_uom; 
     EditText prod_qnty,prod_price; 
     TextWatcher qtyWatcher; 
     TextWatcher priceWatcher; 
     int ref; 
    } 

} 

ですよろしく

答えて

0

ない、彼らが関与してリストビューとrecycleviewは次のように使用できることを確認して、私を助けてくださいリサイクル・メカニズムを使用して作成したビューを再利用し、ユーザーがスクロール・ダウンしてデータを表示する際に、配列やカーソルからデータを再バインドします。言い換えれば、作成された行ビューは、画面に表示する数が限られており(両側から余分なものはほとんどありません)、リサイクルされ、データを表示するために再利用されます。あなたが挿入した同じデータを表示するか、同じ位置に表示するためにプロセスが再結合しますが、これは可能です。

親/子ベースでアプリケーションを再構築することをお勧めします。例えば固定された製品データなどのリスト上の親データを表示するユーザーがある製品ラインをクリックすると別の画面が開き、ユーザーは新しい製品データを挿入する。例えば、その製品ラインの価格、子画面のレイアウトにはedittext、このような場合、SQLiteデータベースを統合して、ユーザーが提供する新しいデータを永続化する必要があります。

希望これは、あなたの目標を達成するのに役立ついくつかの有用なアイデアを提供することを願っています。

0

これは私のために働く!

if (holder.qtyWatcher != null) { 
      holder.txtFourth.removeTextChangedListener(holder.qtyWatcher); 
     } 
     // Create the TextWatcher corresponding to this row 
     holder.qtyWatcher = new TextWatcher() { 
      @Override 
      public void afterTextChanged(Editable s) { 
       if(s.toString().equals("")||s.toString().equals("0")){ 
        arrayproducts.get(position).setQnty("0"); 
       } 
       else{ 
        arrayproducts.get(position).setQnty(s.toString()); 
       } 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) {} 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
     }; 
関連する問題