2016-08-01 12 views
1

我已经创建了一个listview膨胀布局。膨胀的布局有一个edittext和两个按钮,可以增加或减少edittext中的值。但问题是,如果我更改listview中的第一个edittext的值,更改会反映在listview的第四个edittext(第四个子项)中。同样,第二个edittext中的更改反映到第五个edittext等等。我写的代码在listview中扩充布局如下。请帮我解决这个问题。在其他listview子布局反映的listview的一个孩子布局的变化

public class DisplayList extends AppCompatActivity { 

private static final String TAG_CATEGORY = "main_name"; 
private static final String TAG_SUBCAT = "cat_name"; 
private static final String TAG_CODE = "code"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_RATE = "rate"; 
private static final String TAG_RATE2 = "rate2"; 
private static final String TAG_RATE3 = "rate3"; 
private static final String TAG_IMAGE = "img"; 

ImageAdapter mImageAdapter = null; 
ListView mListView = null; 
DatabaseHelper myDb; 
FloatingActionButton fab1; 

public ArrayList<DetailsVO> mListDetails = new ArrayList<DetailsVO>(); 

String subc; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_list); 

    myDb=new DatabaseHelper(DisplayList.this); 

    fab1 = (FloatingActionButton) findViewById(R.id.fab); 
    fab1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent=new Intent(DisplayList.this,NewCart.class); 
      startActivity(intent); 
     } 
    }); 

    mListView = (ListView) findViewById(R.id.list_view); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     subc = extras.getString("Subcat"); 
    } 

    new AsyncCallSoap1().execute(); 



} 

public class AsyncCallSoap1 extends AsyncTask<String,Void,String> { 
    private final ProgressDialog dialog=new ProgressDialog(DisplayList.this); 

    @Override 
    protected String doInBackground(String... params) { 
     CallSoap com=new CallSoap(); 
     String SOAP_ACTION="http://tempuri.org/IprotechService/SelectSuCatgeory"; 
     String OPERATION_NAME="SelectSuCatgeory"; 
     String response = com.getDetails(OPERATION_NAME,SOAP_ACTION); 

     if(response!=null){ 
      try { 

       JSONArray array1 = new JSONArray(response); 

       for(int i=0;i<array1.length();i++) 
       { 

        final DetailsVO detailsVO = new DetailsVO(); 
        JSONObject obj1 = array1.getJSONObject(i); 

        String out_category = obj1.getString(TAG_CATEGORY); 
        String out_subcat = obj1.getString(TAG_SUBCAT); 
        String out_code = obj1.getString(TAG_CODE); 
        String out_name = obj1.getString(TAG_NAME); 
        String out_rate = obj1.getString(TAG_RATE); 
        String out_rate2 = obj1.getString(TAG_RATE2); 
        String out_rate3 = obj1.getString(TAG_RATE3); 
        String out_img = obj1.getString(TAG_IMAGE); 

        if(subc.equalsIgnoreCase(out_subcat)){ 
         detailsVO.setImage(out_img); 
         detailsVO.setName(out_name); 
         detailsVO.setRate(out_rate); 
         detailsVO.setRate2(out_rate2); 
         detailsVO.setRate3(out_rate3); 

         mListDetails.add(detailsVO);} 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
     return response; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     //Showing progress dialog 
     dialog.setMessage("Please wait..."); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dialog.dismiss(); 

     if(mListDetails != null){ 
      mImageAdapter = new ImageAdapter(DisplayList.this, mListDetails); 
      mListView.setAdapter(mImageAdapter); 

     } 

    } 
} 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    private ArrayList<DetailsVO> mItems; 
    private ArrayList<DetailsVO> mOriginalItems; 


    public ImageAdapter(Context context, ArrayList<DetailsVO> items) { 
     this.mContext = context; 
     this.mItems = items; 
    } 

    @Override 
    public int getCount() { 
     return mItems.size(); 
    } 

    @Override 
    public DetailsVO getItem(int position) { 
     return mItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public ArrayList<DetailsVO> getItems(){ 
     return mItems; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.row_layout, null); 

     } 

     DetailsVO detailsVO = mItems.get(position); 

     View listView = (View) convertView; 

     ImageView image = (ImageView) listView.findViewById(R.id.imageView2); 

     final TextView textTitle = (TextView) listView.findViewById(R.id.textView2); 

     final Spinner spinner=(Spinner) listView.findViewById(R.id.spinner); 

     Button btnplus = (Button) listView.findViewById(R.id.max); 
     Button btnminus = (Button) listView.findViewById(R.id.min); 
     final Button btnadd=(Button) listView.findViewById(R.id.btn_add); 
     btnadd.setClickable(true); 

     final TextView quantity = (TextView) listView.findViewById(R.id.quantity); 

     ArrayList<String> rate=new ArrayList<String>(); 

     rate.add("Rs."+detailsVO.getRate()); 
     if(detailsVO.getRate2()!= null && !detailsVO.getRate2().isEmpty()) 
     { 
      rate.add("Rs."+detailsVO.getRate2()); 
     } 
     if(detailsVO.getRate3()!= null && !detailsVO.getRate3().isEmpty()) 
     { 
      rate.add("Rs."+detailsVO.getRate3()); 
     } 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(DisplayList.this, android.R.layout.simple_spinner_item,rate); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(dataAdapter); 


     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       String item = parent.getItemAtPosition(position).toString(); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 

     btnminus.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       String value = quantity.getText().toString(); 
       int quantity1 = Integer.parseInt(value); 

       if(quantity1>0) 
       { 
        quantity1 = quantity1 -1; 

        String t = Integer.toString(quantity1); 
        quantity.setText(t); 
       } 
      } 
     }); 


     btnplus.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       String value1 = quantity.getText().toString(); 
       int quantity2 = Integer.parseInt(value1); 
       quantity2 = quantity2 + 1; 

       String t=Integer.toString(quantity2); 

       quantity.setText(t); 
        } 
     }); 

     final String u=detailsVO.getImage(); 
     btnadd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       String im="http://protech.absoftwaresolution.com/img/grocery_imgs/grains/"+u; 
       String nm = textTitle.getText().toString(); 
       String value = quantity.getText().toString(); 
       int q= Integer.parseInt(value); 

       String rate=spinner.getSelectedItem().toString(); 
       String val = rate.substring(rate.lastIndexOf("-")- 1); 
       final String val1=rate.substring(3,rate.lastIndexOf("-")); 
       int b = Integer.parseInt(val1.trim()); 
       final int a= q*b; 
       String c=Integer.toString(a); 

       boolean isInserted = myDb.insertData(im,nm,val1,q,a); 
       if (isInserted == true) { 
        Toast.makeText(DisplayList.this, "Item Added Successfully!!!", Toast.LENGTH_LONG).show(); 

       } 

        } 

     }); 

     Picasso.with(mContext) 
       .load("http://protech.absoftwaresolution.com/img/grocery_imgs/grains/"+detailsVO.getImage()) 
       .placeholder(R.drawable.placeholder) 
       .into(image); 


     textTitle.setText(detailsVO.getName()); 

     return listView; 
    } 

} 

当我点击btnplus & btnminus我改变它在第四接下来的EditText反映列表视图

+0

使用_View Holder_ pattern! – Piyush

+0

好的,谢谢,我会尝试 –

回答

1

我认为这正在发生的事情,因为你的听众是在getView内声明的EditText值()。 ListView在您上下滚动时回收视图及其引用。基本上,当你点击第一行的内容时,ListView将会改变对其他对象的引用。如果没有视图ID或标记来跟踪它,那些点击就会转到其他地方。

我试图解决这个问题的方法是在适配器外部为您的listview项目声明一个OnItemClickListener。在里面,检测哪个子视图(按钮+/-)被点击,然后相应地调整你的字符串。一旦你有一个容器/ ViewGroup的参考,你应该设置...

+0

谢谢,我会做出相应的更改 –