Roo*_*kie 2 android android-layout android-activity
我正在进行购物车分配,因为我创建了一个自定义ListView,其中包含每行中的图片,价格和添加到购物车按钮.我还在顶部有一个textview,每当用户按下Add to cart时它就会递增.每行中的Button完全正常工作但我不知道如何递增计数器并将其设置为textview,因为每当我在onClick事件下执行此操作时我都会遇到运行时错误.我正在与您分享代码.
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;
}
Run Code Online (Sandbox Code Playgroud)
}` 这里是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)
Run Code Online (Sandbox Code Playgroud)
确保您在xml中引用了TextView.
连接(使用findViewById())里面onCreate()的Activity唯一的,你可以将它传递给你的Adapter(即制作类的字段和setter getter方法),如果Adapter是一个单独的类.
并且不要在getView()Adapter 内执行此操作,删除此行.
final TextView tv = (TextView)convertView.findViewById(R.id.tvCount);
Run Code Online (Sandbox Code Playgroud)
你会把你TextView从Activity到Adapter使用构造函数或setter getter方法,将使用类保留引用Adapter's类级变量和你会做什么里面onClick()的Button就是:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
yourClassLevelTextView.setText(String.valueOf(count));
}});
Run Code Online (Sandbox Code Playgroud)
如何将TextView传递给Adapter
public class YourAdapter extends BlahBlahBlah
{
private TextView yourClassLevelTextView;
public void setTextView(TextView textViewFromActivity)
{
this.yourClassLevelTextView = textViewFromActivity;
}
}
Run Code Online (Sandbox Code Playgroud)
并Activity做这样的事情:
YourAdapter adapter = new YourAdapter(blah, blah, blah);
adapter.setTextView(yourTextViewInActivity);
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35682 次 |
| 最近记录: |