На кнопке Нажмите, как увеличить счетчик и показать в текстовом представлении

Я работаю над назначением корзины покупок, для которого я создал собственный ListView, который содержит кнопки «Изображение», «Цена» и «Добавить в корзину» в каждой строке. У меня также есть текстовое представление вверху, которое увеличивается каждый раз, когда пользователь нажимает Добавить в корзину. Кнопка в каждой строке прекрасно работает, но я не знаю, как увеличить счетчик и установить его в 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;
     }

} `Вот 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)
 Adil Soomro20 мар. 2012 г., 12:10
У вас есть одинTextView показывать счетчик сверху или в каждом ряду?
 Samir Mangroliya20 мар. 2012 г., 12:07
Если у вас есть ошибка, всегда публикуйте полный logcat здесь и не забывайте в будущем
 MByD20 мар. 2012 г., 12:06
Проверить, еслиtv нулевой
 Rookie20 мар. 2012 г., 12:12
Это наверху. Я имею в виду, что это не повторяется в каждой строке, но кнопка в каждом ряду при нажатии, на котором я хочу увеличить счетчик.

Ответы на вопрос(4)

я полагаю, счетчик текста в вашем коде не принадлежит владельцу. Счетчик текста также должен отображаться через владельца

 Manju20 мар. 2012 г., 13:36
я думаю, что вы дали кнопку прослушивателя onclick в блоке if (convertview == null), почему вы не можете проверить этот onclicklistener независимо от того, если и в этом месте convertview только findviewbyid.can вы поместите весь код, и я проверю
 Rookie20 мар. 2012 г., 13:52
Здравствуйте, я отредактировал вопрос, и теперь весь код там. Пожалуйста, посмотрите спасибо,
 Rookie20 мар. 2012 г., 13:27
Я пробовал это, но это не работает, та же ошибка в той же строке.

ТвойТВ TextView отсутствует в макете строки списка (где вы ищете его прямо сейчас). Вам придется искать его в макете активности, если вы объявили его там (или в макете, где вы его объявили):

final TextView tv  = (TextView)findViewById(R.id.tvCount);
 Rookie20 мар. 2012 г., 14:10
Ты был прав ! Это была проблема. Спасибо :)
Решение Вопроса

Подключите это (используяfindViewById()) внутриonCreate() изActivity только, и вы можете передать егоAdapter (т.е. создание поля класса и метода получателя сеттера), еслиAdapter это отдельный класс.

и не делай этого внутриgetView() Адаптера, удалите эту строку.

final TextView tv  = (TextView)convertView.findViewById(R.id.tvCount);

ты передашьTextView изActivity вAdapter используя метод получения конструктора или установщика, сохранит ссылку, используя классAdapter's переменная уровня класса и что вы будете делать внутриonClick() изButton является:

btn.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
          count++;
         yourClassLevelTextView.setText(String.valueOf(count));
     }});
РЕДАКТИРОВАТЬ:

как вы будете передавать TextView на адаптер

public class YourAdapter extends BlahBlahBlah
{
     private TextView yourClassLevelTextView;
     public void setTextView(TextView textViewFromActivity)
     {
         this.yourClassLevelTextView = textViewFromActivity;
     }
}

И вActivity сделать что-то вроде этого:

YourAdapter adapter = new YourAdapter(blah, blah, blah);
adapter.setTextView(yourTextViewInActivity);
listView.setAdapter(adapter);
 Rookie20 мар. 2012 г., 14:07
УХ ТЫ !! Спасибо, наконец-то это работает !! :)
 Rookie20 мар. 2012 г., 13:53
Спасибо, дай мне посмотреть.
 Rookie20 мар. 2012 г., 13:44
Под классом MainActivity в функции oncreate я сейчас обращаюсь к нему, но меня смущает, как настроить его получение и доступ к нему в другом классе.
 Adil Soomro20 мар. 2012 г., 13:48
см отредактированный ответ ..

вот так .. Пусть это вам поможет.

btn.setOnClickListener(new View.OnClickListener() 
{

            @Override
            public void onClick(View v) {
                    count++;
                   setTimertext(count);

        }
        });

public void setTimertext(String strValue) {         
        runOnUiThread(new Runnable() {
            public void run() {

                txt.setText(String.valueOf(strValue));    
            }
        });
    }
 Rookie20 мар. 2012 г., 13:44
Попробовал, не работает ...
 Hasmukh20 мар. 2012 г., 13:51
хорошо, позвольте мне найти другое решение ..
 Hasmukh20 мар. 2012 г., 12:38
попробуйте это, это может помочь вам.

Ваш ответ на вопрос