2017-03-16 86 views
-1

我想增加和減少textview內點擊按鈕在特定位置的值。我做了自定義列表視圖。問題是,當我點擊+第一個按鈕項目,數量增加1,獎品增加20,但當我點擊第二項時,數量直接從0增加到2,獎品直接增加到40.我想要書必須增加20,筆必須增加30和鉛筆5和同樣是decrement.As我在安卓plz幫助me.Thanks在advance.Following你的幫助,新的是我的代碼: -增加和減少textview內的值按鈕點擊特定位置

order.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/item_name" 
     android:orientation="horizontal" 
     android:layout_toRightOf="@+id/sr_no" 

     > 
     <TextView 
      android:layout_width="150dp" 
      android:layout_height="50dp" 
      android:layout_toRightOf="@+id/srno" 
      android:layout_below="@+id/breakfast" 
      android:text="ITEM NAME" 
      android:id="@+id/itemname" 
      android:gravity="center" 
      android:textStyle="bold" 
      android:textColor="#000" 
      /> 

    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/qtity" 
     android:orientation="horizontal" 
     android:layout_toRightOf="@+id/item_name" 

     > 
     <TextView 
      android:layout_width="40dp" 
      android:layout_height="50dp" 
      android:layout_toRightOf="@+id/itemname" 
      android:layout_below="@+id/lunch" 
      android:text="QTY" 
      android:id="@+id/quantity" 
      android:gravity="center" 
      android:textStyle="bold" 
      android:textColor="#000" 
      /> 

    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/count" 
     android:layout_toRightOf="@+id/qtity" 

     > 
     <TextView 
      android:layout_width="50dp" 
      android:layout_height="50dp" /> 

    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/rate" 
     android:orientation="horizontal" 
     android:layout_toRightOf="@+id/count" 

     > 
     <TextView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_toRightOf="@+id/quantity" 
      android:layout_below="@+id/snacks" 
      android:text="PRICE" 
      android:id="@+id/price" 
      android:gravity="center" 
      android:textStyle="bold" 
      android:textColor="#000" 
      /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/sr_no" 
     android:orientation="horizontal" 

     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 
     <TextView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_below="@+id/breakfast" 
      android:layout_margin="2dp" 
      android:layout_marginTop="10dp" 
      android:text="SR.NO" 
      android:gravity="center" 
      android:textStyle="bold" 
      android:textColor="#000" 
      android:id="@+id/srno" 
      /> 

    </LinearLayout> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="350dp" 
     android:id="@+id/listdetails" 
     android:scrollbars="vertical" 
     android:scrollbarStyle="insideOverlay" 
     android:layout_below="@+id/item_name" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 


    </ListView> 


</RelativeLayout> 


customlist.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:id="@+id/s_no" 
     android:layout_marginTop="5dp" 
     android:gravity="center" 
     android:textColor="#000" 
     android:textStyle="bold" 
     /> 
    <TextView 
     android:layout_width="150dp" 
     android:layout_height="50dp" 
     android:gravity="center" 
     android:textColor="#000" 
     android:textStyle="bold" 
     android:id="@+id/i_name" 
     android:layout_marginTop="5dp" 
     android:layout_toRightOf="@+id/s_no" 
     /> 
    <TextView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:id="@+id/qty" 
     android:layout_toRightOf="@id/i_name" 
     android:gravity="center" 
     android:textColor="#000" 
     android:textStyle="bold" 
     android:layout_marginTop="5dp" 
     /> 
    <Button 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:id="@+id/pl" 
     android:layout_marginTop="5dp" 
     android:layout_toRightOf="@+id/qty" 
     android:background="@drawable/plus1" 
     /> 
    <Button 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:id="@+id/min" 
     android:layout_marginTop="3dp" 
     android:layout_below="@id/pl" 
     android:layout_toRightOf="@id/qty" 
     android:background="@drawable/minus1" 
     /> 

    <TextView 
     android:layout_width="60dp" 
     android:layout_height="50dp" 
     android:id="@+id/pr" 
     android:gravity="center" 
     android:textColor="#000" 
     android:textStyle="bold" 
     android:layout_marginLeft="10dp" 
     android:layout_alignBottom="@+id/min" 
     android:layout_toRightOf="@+id/pl" 
     android:layout_toEndOf="@+id/pl" /> 
</RelativeLayout> 


Order.java 
public class Order extends Activity { 

    ListView list_item; 

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

     list_item=(ListView)findViewById(R.id.listdetails); 

     int sr[]={1,2,3}; 
     // int sr=1; 
     // String[] item_name={"book","pen","notebook","pendrive","rubber","scale","pencil","slate","crayons","compass box"}; 
     String [] itemname={"book","pen","pencil"}; 
     int [] quantity={0,0,0}; 
     //int[] price={20,20,25,25,30,30,20,10,25,10}; 
     int [] price={20,30,5}; 



      Custom_Adapter ca=new Custom_Adapter(this,sr,itemname,price,quantity); 
      list_item.setAdapter(ca); 
    } 
} 


CustomAdapter.java 
public class Custom_Adapter extends BaseAdapter { 
    Activity a; 
    int sr []; 
int quantity[]; 

    String itemname[]; 
    int price[]; 

    TextView qt; 
    public static int count=0,count2=0,cal; 


    private String data,pricedata; 



    public Custom_Adapter(Activity a, int[] sr, String[] itemname, int[] price, int quantity[]) { 
     this.a = a; 
     this.sr = sr; 
     this.itemname = itemname; 
     this.price = price; 
     this.quantity = quantity; 

    } 

    @Override 
    public int getCount() { 
     return itemname.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

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

     TextView srh,item,qt,rate; 
     Button plus,minus; 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     final viewHolder viewHolder=new viewHolder(); 
     LayoutInflater li=a.getLayoutInflater(); 
     View view=li.inflate(R.layout.customlist,parent,false); 
     viewHolder.srh=(TextView)view.findViewById(R.id.s_no); 
     viewHolder.item=(TextView)view.findViewById(R.id.i_name); 
     viewHolder.qt=(TextView)view.findViewById(R.id.qty); 
     viewHolder.plus=(Button)view.findViewById(R.id.pl); 
     viewHolder.minus=(Button)view.findViewById(R.id.min); 
     viewHolder.rate=(TextView)view.findViewById(R.id.pr); 




     viewHolder.srh.setText(Integer.toString(sr[position])); 
     viewHolder.item.setText(itemname[position]); 
     viewHolder.qt.setText(Integer.toString(quantity[position])); 

     viewHolder.rate.setText(Integer.toString(price[position])); 





     viewHolder.plus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

        count+=1; 
       count2+=20; 
       viewHolder.qt.setText(String.valueOf(count)); 
       viewHolder.rate.setText(String.valueOf(count2)); 



      } 
     }); 
     viewHolder.minus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       if (count>0 && count2>0) { 
        count = count - 1; 
        count2-=20; 
        viewHolder.qt.setText(String.valueOf(count)); 
        viewHolder.rate.setText(String.valueOf(count2)); 
       } 

      } 
     }); 

     return view; 
    } 
} 
+0

我不知道如果我正確理解你,你分享的代碼越多越清晰就是你的問題。 應該顯示什麼數據?你的列表應該包含單個viewType或不同的類型?你如何更新數據? – Lukas

+0

上面的代碼,我已發佈完整..我想增加或減少在特定項目的數量和數量 –

回答

0

據我理解你的代碼邏輯不correct.first你如果您已從列表中選擇書籍,請根據維護您的數量[]數組獲取選擇哪個項目更新您的數量[1,0,0],並且如果您再次選擇書籍以便獲得書本數量計數增量值它由1和更新數量[2,0,0]。

+0

你能告訴我正確的邏輯嗎?正如你所說的書是正確的,但在同一時間鉛筆數量和金額應該增加和減少 –

+0

好吧,等一下,我會重寫你的問題,以更好的方式給一些時間:) –

+0

嗨,我已經解決了你的問題我已經做了一些自定義適配器上的修改,你可以從下面的鏈接下載代碼謝謝享受:) https://bitbucket.org/nikhoney27/penpencils –

0

至於你的問題相關的問題在你的java代碼不在XML,因此,如果您發佈的Java代碼,我們可以幫你

的問題可能是,你可能已經被重用整個列表視圖數據集模型對象

+0

我給我的自定義adapter.java代碼 –

+0

創建一個模型類,並將計數值內的該模型類,使用該類來設置或獲取計數,以便對於每個項目您有一個單獨的條目 類模型{ String sr; 字符串itemname; int []價格,int數量[]){ –

0

你的java代碼在你的列表視圖中有錯誤每行都有按鈕和textview如果是的話,你必須在適配器中聲明你的整數,如果它在列表視圖的外側,那麼你可以在你的主類中聲明它。我認爲你的每個listview項目都有相同的變量,只需在你的適配器中初始化一個整數,它就能解決問題。您可以顯示您的Java代碼以獲得進一步的幫助。希望你明白我想說的話,它可以幫助你。祝你好運!

+0

你可以給解決方案 –

+0

你必須顯示代碼好友。之後,我可以幫你 –

+0

你想要哪個代碼?我給了完整的代碼.. –

0
public class Model { 
     int sr; 
     String itemName; 
     float price; 
     float singlePiecePrice; 
     int quantity; 

     public Model(int sr, String itemName, float singlePiecePrice, int quantity) { 
      this.sr = sr; 
      this.itemName = itemName; 
      this.singlePiecePrice = singlePiecePrice; 
      this.quantity = quantity; 
     } 
    } 


    public class Order extends Activity { 

     ListView list_item; 

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

      list_item = (ListView) findViewById(R.id.listdetails); 

      ArrayList<Model> dataSet = new ArrayList<>(); 
      dataSet.add(new Model(1, "book", 0, 20)); 
      dataSet.add(new Model(2, "pen", 0, 30)); 
      dataSet.add(new Model(3, "pencil", 0, 5)); 

      Custom_Adapter ca = new Custom_Adapter(this, dataSet); 
      list_item.setAdapter(ca); 
     } 
    } 


    public class Custom_Adapter extends BaseAdapter { 


     private ArrayList<Model> dataSet; 
     private LayoutInflater layoutInflater; 

     public Custom_Adapter(Context context, ArrayList<Model> dataSet) { 
      layoutInflater = LayoutInflater.from(context); 
      this.dataSet = dataSet; 
     } 

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

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

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

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

      final ViewHolder holder; 
      if (convertView == null) { 
       convertView = layoutInflater.inflate(R.layout.customlist, parent, false); 

       holder = new ViewHolder(); 

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

         Model model = dataSet.get(position); 
         model.quantity++; 
         model.price += model.singlePiecePrice; 
         dataSet.set(position, model); 
         holder.qt.setText(String.valueOf(model.quantity)); 
         holder.rate.setText(String.valueOf(model.price)); 


        } 
       }); 
       holder.minus.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Model model = dataSet.get(position); 
         if (model.quantity > 0 && model.price > 0) { 
          model.quantity--; 
          model.price -= model.singlePiecePrice; 
          dataSet.set(position, model); 
          holder.qt.setText(String.valueOf(model.quantity)); 
          holder.rate.setText(String.valueOf(model.price)); 
         } 

        } 
       }); 


      } 

      return convertView; 
     } 

     public class ViewHolder { 

      TextView srh, item, qt, rate; 
      Button plus, minus; 
     } 

    }