在按钮单击如何递增计数器,并显示在TextView中 [英] On Button Click how to increment counter and show in textview
问题描述
我工作的一个购物车分配,我已经创建了一个包含图片,价格并添加到购物车按钮,每行中一个自定义的ListView。 我也有一个TextView顶部它每次递增,用户presses添加到购物车。 每一行中的按钮是完全工作正常,但我不知道如何增加计数器并将其设置为TextView的是,每当我这样做是在onClick事件,我得到运行时错误。 我与你分享的code。
包uet.cs08.bll;
进口的java.util.ArrayList;
进口uet.cs08.android.R;
进口uet.cs08.android.mainActivity2;
进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.Button;
进口android.widget.ImageView;
进口android.widget.TextView;
公共类itemBaseAdapter扩展了BaseAdapter {
公众诠释计数= 5;
私人的ArrayList< ItemInfo> ITEMLIST;
私人LayoutInflater mInflater;
公共itemBaseAdapter(上下文的背景下,ArrayList的< ItemInfo> ITEMLIST){
this.itemList = ITEMLIST;
mInflater = LayoutInflater.from(上下文);
}
@覆盖
公众诠释getCount将(){
返回itemList.size();
}
@覆盖
公共对象的getItem(INT IDX){
返回itemList.get(IDX);
}
@覆盖
众长getItemId(INT IDX){
// TODO自动生成方法存根
返回IDX;
}
@覆盖
公共查看getView(INT IDX,查看convertView,ViewGroup中父){
最后ViewHolder持有人;
如果(convertView == NULL){
convertView = mInflater.inflate(R.layout.item_list_row,NULL);
持有人=新ViewHolder();
holder.txtItemName =(TextView中)convertView.findViewById(R.id.itemName);
holder.txtPic =(ImageView的)convertView.findViewById(R.id.pic);
holder.txtPrice =(TextView中)convertView.findViewById(R.id.price);
holder.counter =(TextView中)convertView.findViewById(R.id.tvCount);
按钮BTN =(按钮)convertView.findViewById(R.id.Cart);
最后的TextView电视=(TextView中)convertView.findViewById(R.id.tvCount);
btn.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
数=的Integer.parseInt((字符串)tv.getText());
算上++;
tv.setText(+计);
}
});
//tv.setText(""+count);
convertView.setTag(保持器);
}其他
{
支架=(ViewHolder)convertView.getTag();
}
holder.txtItemName.setText(itemList.get(IDX).itemName);
holder.txtPic.setImageResource(itemList.get(IDX).PIC);
holder.txtPrice.setText(+ itemList.get(IDX)。价格);
holder.counter.setText(itemList.get(IDX).Count之间);
返回convertView;
}
类ViewHolder {
TextView的txtItemName;
ImageView的txtPic;
TextView的txtPrice;
TextView的计数器;
}
} ` 下面是logcat中。
03-20 16:16:38.853:D / AndroidRuntime(2759):关闭虚拟机
03-20 16:16:38.853:W / dalvikvm(2759):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40015560)
03-20 16:16:38.883:E / AndroidRuntime(2759):致命异常:主要
03-20 16:16:38.883:E / AndroidRuntime(2759):显示java.lang.NullPointerException
03-20 16:16:38.883:E / AndroidRuntime(2759):在uet.cs08.bll.itemBaseAdapter $ 1.onClick(itemBaseAdapter.java:61)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.view.View.performClick(View.java:2485)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.view.View $ PerformClick.run(View.java:9080)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.os.Handler.handleCallback(Handler.java:587)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.os.Handler.dispatchMessage(Handler.java:92)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.os.Looper.loop(Looper.java:123)
03-20 16:16:38.883:E / AndroidRuntime(2759):在android.app.ActivityThread.main(ActivityThread.java:3683)
03-20 16:16:38.883:E / AndroidRuntime(2759):在java.lang.reflect.Method.invokeNative(本机方法)
03-20 16:16:38.883:E / AndroidRuntime(2759):在java.lang.reflect.Method.invoke(Method.java:507)
03-20 16:16:38.883:E / AndroidRuntime(2759):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
03-20 16:16:38.883:E / AndroidRuntime(2759):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-20 16:16:38.883:E / AndroidRuntime(2759):在dalvik.system.NativeStart.main(本机方法)
请确保您有参考XML你的TextView。
连接它(使用 findViewById()
)内的onCreate()
活动的
只,你可能把它传递给你的适配器
(即制造类的字段和setter的getter方法),如果适配器
是一个独立的类。
和不做这里面的 getView()
适配器,删除此行。
最后的TextView电视=(TextView中)convertView.findViewById(R.id.tvCount);
您会通过你的的TextView
从活动
到适配器
使用构造函数或setter的getter方法,将保持一个参考使用类适配器的
类级别的变量和你会做内部的的onClick()$ C $ç
按钮
的>是:
btn.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
算上++;
yourClassLevelTextView.setText(将String.valueOf(计数));
}});
编辑:
你将如何传递的TextView到适配器
公共类YourAdapter扩展BlahBlahBlah
{
私人TextView的yourClassLevelTextView;
公共无效setTextView(TextView的textViewFromActivity)
{
this.yourClassLevelTextView = textViewFromActivity;
}
}
和活动
做这样的事情:
YourAdapter适配器=新YourAdapter(等等,等等,等等);
adapter.setTextView(yourTextViewInActivity);
listView.setAdapter(适配器);
I am working on a shopping cart assignment for that I have created a custom ListView that contains the Picture, Price and Add to Cart button in each row. I also have a textview at the top which increments everytime the user presses the Add to cart. The Button in every row is perfectly working fine but I don't know how to increment the counter and set it to the textview as whenever I do this under onClick event I get runtime error. I am sharing with you the code.
package uet.cs08.bll;
import java.util.ArrayList;
import uet.cs08.android.R;
import uet.cs08.android.mainActivity2;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class itemBaseAdapter extends BaseAdapter {
public int count = 5;
private ArrayList<ItemInfo> itemList;
private LayoutInflater mInflater;
public itemBaseAdapter(Context context, ArrayList<ItemInfo> itemList){
this.itemList=itemList;
mInflater= LayoutInflater.from(context);
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int idx) {
return itemList.get(idx);
}
@Override
public long getItemId(int idx) {
// TODO Auto-generated method stub
return idx;
}
@Override
public View getView(int idx, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView==null){
convertView=mInflater.inflate(R.layout.item_list_row, null);
holder = new ViewHolder();
holder.txtItemName=(TextView) convertView.findViewById(R.id.itemName);
holder.txtPic=(ImageView) convertView.findViewById(R.id.pic);
holder.txtPrice=(TextView) convertView.findViewById(R.id.price);
holder.counter = (TextView) convertView.findViewById(R.id.tvCount);
Button btn = (Button) convertView.findViewById(R.id.Cart);
final TextView tv = (TextView)convertView.findViewById(R.id.tvCount);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count = Integer.parseInt((String)tv.getText());
count++;
tv.setText("" + count);
}
});
//tv.setText(""+count);
convertView.setTag(holder);
}else
{
holder = (ViewHolder) convertView.getTag();
}
holder.txtItemName.setText(itemList.get(idx).itemName);
holder.txtPic.setImageResource(itemList.get(idx).pic);
holder.txtPrice.setText(""+itemList.get(idx).price);
holder.counter.setText(itemList.get(idx).count);
return convertView;
}
class ViewHolder {
TextView txtItemName;
ImageView txtPic;
TextView txtPrice;
TextView counter;
}
} ` Here is the logCat.
03-20 16:16:38.853: D/AndroidRuntime(2759): Shutting down VM
03-20 16:16:38.853: W/dalvikvm(2759): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-20 16:16:38.883: E/AndroidRuntime(2759): FATAL EXCEPTION: main
03-20 16:16:38.883: E/AndroidRuntime(2759): java.lang.NullPointerException
03-20 16:16:38.883: E/AndroidRuntime(2759): at uet.cs08.bll.itemBaseAdapter$1.onClick(itemBaseAdapter.java:61)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.view.View.performClick(View.java:2485)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.view.View$PerformClick.run(View.java:9080)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.os.Handler.handleCallback(Handler.java:587)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.os.Looper.loop(Looper.java:123)
03-20 16:16:38.883: E/AndroidRuntime(2759): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-20 16:16:38.883: E/AndroidRuntime(2759): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 16:16:38.883: E/AndroidRuntime(2759): at java.lang.reflect.Method.invoke(Method.java:507)
03-20 16:16:38.883: E/AndroidRuntime(2759): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-20 16:16:38.883: E/AndroidRuntime(2759): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-20 16:16:38.883: E/AndroidRuntime(2759): at dalvik.system.NativeStart.main(Native Method)
Make sure you have reference to your TextView in xml.
Connect it (using findViewById()
) inside onCreate()
of Activity
only, and you may pass it to your Adapter
(i.e making a class field and setter getter method), if Adapter
is a separate class.
and dont do this inside getView()
of Adapter, remove this line.
final TextView tv = (TextView)convertView.findViewById(R.id.tvCount);
you will pass your TextView
from Activity
to Adapter
using constructor or setter getter method, will keep a reference using class Adapter's
class level variable and the what you will do inside onClick()
of Button
is:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
yourClassLevelTextView.setText(String.valueOf(count));
}});
EDIT:
how you will pass TextView to Adapter
public class YourAdapter extends BlahBlahBlah
{
private TextView yourClassLevelTextView;
public void setTextView(TextView textViewFromActivity)
{
this.yourClassLevelTextView = textViewFromActivity;
}
}
and in Activity
do something like this:
YourAdapter adapter = new YourAdapter(blah, blah, blah);
adapter.setTextView(yourTextViewInActivity);
listView.setAdapter(adapter);
这篇关于在按钮单击如何递增计数器,并显示在TextView中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!