2017-03-18 87 views
0

我想增加和减少点击数的价值。 我使用ImageView减少和增加中间我使用TextView显示值的值。如何使用ImageView增加和减少数值(数量)?

这个东西在Activity中完全工作,但是我想在ListView中执行这个操作。

这里是完整的代码,它在简单的Activity上工作。

qty.java

public class qty extends AppCompatActivity { 
    int minteger = 0; 
    ImageView decrease; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.raw_order); 
     decrease=(ImageView) findViewById(R.id.decrease); 
     decrease.setEnabled(false); 


    } 

    public void increaseInteger(View view) { 
     minteger = minteger + 1; 
     display(minteger); 

    }public void decreaseInteger(View view) { 
     minteger = minteger - 1; 
     display(minteger); 
    } 

    private void display(int number) { 
     TextView displayInteger = (TextView) findViewById(
       R.id.integer_number); 

     displayInteger.setText("" + number); 
    } 
} 

raw_order.xml

<LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/decrease" 
       android:layout_width="30dp" 
       android:layout_height="wrap_content" 
       android:src="@drawable/minus" 
       android:layout_marginTop="05dp" 
       android:textColor="#000" 
       android:onClick="decreaseInteger" 
       /> 
       <TextView 
        android:id="@+id/integer_number" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="0" 
        android:layout_marginRight="10dp" 
        android:layout_marginLeft="10dp" 
        android:textStyle="bold" 
        android:layout_marginTop="16dp" 
        android:textSize="20dp" /> 
       <ImageView 
        android:id="@+id/increase" 
        android:layout_marginTop="05dp" 
        android:layout_width="30dp" 
        android:onClick="increaseInteger" 
        android:layout_height="wrap_content" 
        android:src="@drawable/plus" 
        android:textColor="#000"/> 
       </LinearLayout> 

,我想在ListView控件执行同样的事情

ListViewadapterorder.java

 package omcommunication.orderdesign; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.util.SparseIntArray; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.PopupWindow; 
import android.widget.TextView; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import static android.media.CamcorderProfile.get; 

public class ListViewAdapterorder extends BaseAdapter implements ListAdapter{ 
    Context cntx; 
    SparseIntarray sia; // class variable 
    // SessionManager session; 
    AlertDialog.Builder alertDialogBuilder; 
    View view; 
    int minteger = 0; 
    LayoutInflater inflater; 
    ArrayList<HashMap<String, String>> data; 
    HashMap<String, String> resultp = new HashMap<String, String>(); 
    private boolean status; 
    public static final String KEY_EMP_ID = "id"; 
    public static final String TAG_ID = "o_id"; 

    ArrayList<String> o_aid = new ArrayList<String>(); 
    ArrayList<String> o_aproduct = new ArrayList<String>(); 
    ArrayList<String> o_aqty = new ArrayList<String>(); 
    ArrayList<String> o_atotal = new ArrayList<String>(); 

    public ListViewAdapterorder(Context context, 
           ArrayList<String> o_id, 
           ArrayList<String> o_product, 
           ArrayList<String> o_qty, 
           ArrayList<String> o_total 
    ) { 
// TODO Auto-generated constructor stub 

     cntx = context; 

     o_aid = o_id; 
     o_aproduct = o_product; 
     o_aqty = o_qty; 
     o_atotal = o_total; 

     alertDialogBuilder = new AlertDialog.Builder(context); 
     alertDialogBuilder.setMessage("Do You Want To Call...."); 
    /* session = new SessionManager(context); 
     HashMap<String, String> user = session.getUserDetails(); 
     uid = user.get(SessionManager.KEY_ID); 
*/ 
    } 

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

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

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

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

      TextView mname , pmethod2, pamount3, premark4; 
      final ImageView increase,decrease; 
      final TextView displayInteger; 
      inflater = (LayoutInflater) cntx 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      LayoutInflater inflater = LayoutInflater.from(cntx); 

      convertView = inflater.inflate(R.layout.raw_order, parent, 
        false); 
      decrease = (ImageView) convertView.findViewById(R.id.decrease); 
      increase= (ImageView) convertView.findViewById(R.id.increase); 
      mname = (TextView) convertView.findViewById(R.id.mname); 
      mname.setText(" " + o_aproduct.get(position)); 
      sia = new SparseIntarray(data.size()); 

      displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 

      increase.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        int count = sia.get(position); 
        count++; 
        resultp.put(cout); 
        displayInteger.setText("" + count); 
       } 
      }); 


      return convertView; 
     } 

    private class SparseIntarray { 
     public SparseIntarray(int size) { 

     } 
    } 
} 
+0

为什么不是你使用'recyclerView'? –

回答

1

可以使用SparseIntArray存储值计数每个位置

在listAdapter类中定义变量

SparseIntArray sia; // class variable 

实例..内部listAdap之三构造

sia = new SparseIntArray(data.size()); 

然后OnClick事件

public void onItemClick(...) { 

    int count = sia.get(position) 

    // now increment or decrement as per your requirement 
    // coutn++; or count--; and save it 

    sia.put(position, count); 

编辑1:

集的OnClick听众在getView()方法的增加减少imageViews,

final displayInteger = (TextView) convertView.findViewById(R.id.integer_number); 

increase.setOnClikcListener(new OnClickListener { 
    @Override 
    public void onClick(View view) 
    { 
    int count = sia.get(position); 
    count++; 
    sia.put(position, count); 
    displayInteger.setText("" + count); 

});

,你可以做同样的你的下降鉴于

+0

我们可以在我的代码中做同样的事吗? – Andie

+0

请参阅编辑。希望它现在可以帮助:) –

+0

发布错误!和ListViewadapterorder构造函数代码 –

0

制作的图像视图的OnLickListener再给你需要做一个OnItemSelectedListener方法, 对于列表视图或OnItemClickListener

+0

你可以请用代码解释我吗? – Andie

0

首先,你需要给ImageView的一个ID;然后,像这样做 在创建:::

ImageView img=(ImageView)findViewById(R.id.imageview); 
img.setOnClickListener(imgclick); 

然后在类体内::::

OnClickListener imgclick=new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
      //Call The Methods Like Increase Number Or Decrease 
    } 
}; 
+0

它正在处理简单活动不在ListViewAdapter或ListView的数据中 – Andie