3

I have followed other questions and have done what they have mentioned but didn't get the result. my getTag() gives me ArrayIndexOutofBound error.

Adapter Class

private final Home context;
    private LayoutInflater inflater;
    private int position;
    private ListView mListView;
    private ArrayList<Task> tasks;

    public ListViewAdapter(Home context,ArrayList<Task> tasks) {
        super();
        this.context=context;
        inflater = LayoutInflater.from(this.context);
        this.mListView=mListView;
        this.tasks=tasks;
    }



    private static class ViewHolder {

        ImageView vendor;
        ImageButton accept;
        ImageButton reject;
        TextView date;
        TextView time;
        TextView companyName;
        TextView taskName;
        TextView taskType;
        TextView description;
        TextView status;

    }

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

        System.out.println("GET VIEW");

         ViewHolder viewHolder = null;

         if(convertView == null) {

                convertView = inflater.inflate(R.layout.task_item_layout,null);

                viewHolder = new ViewHolder();
                viewHolder.vendor = (ImageView)convertView.findViewById(R.id.vendor);
                viewHolder.accept = (ImageButton)convertView.findViewById(R.id.yes);
                viewHolder.reject = (ImageButton)convertView.findViewById(R.id.no);
                viewHolder.date = (TextView) convertView.findViewById(R.id.date);
                viewHolder.time = (TextView) convertView.findViewById(R.id.time);
                viewHolder.companyName = (TextView) convertView.findViewById(R.id.companyName);
                viewHolder.taskName = (TextView) convertView.findViewById(R.id.taskName);
                viewHolder.taskType = (TextView) convertView.findViewById(R.id.taskType);
                viewHolder.description = (TextView) convertView.findViewById(R.id.description);
                viewHolder.status=(TextView)convertView.findViewById(R.id.responseMsg);



                convertView.setTag(viewHolder);

            }
         else
         {
            //System.out.println("getTag");
            viewHolder = (ViewHolder)convertView.getTag();
         }

         Resources resources = this.context.getResources();

         if(Home.taskObjList.get(position).providerType.Facebook==true)
         {
             System.out.println("facebook");    

             viewHolder.vendor.setImageDrawable(resources.getDrawable(R.drawable.facebook));


         }
         else if(Home.taskObjList.get(position).providerType.Twitter==true)
         {
             System.out.println("twitter"); 
             viewHolder.vendor.setImageDrawable(resources.getDrawable(R.drawable.twitter));

         }

         viewHolder.status.setVisibility(View.INVISIBLE);
         viewHolder.reject.setVisibility(View.INVISIBLE);
         viewHolder.accept.setVisibility(View.INVISIBLE);


         if(tasks.get(position).status.accepted==true)
          {
               System.out.println("A");

               //viewHolder.accept.setImageResource(R.drawable.yes);
               viewHolder.reject.setVisibility(View.INVISIBLE);
               viewHolder.accept.setVisibility(View.INVISIBLE);
               viewHolder.status.setVisibility(View.VISIBLE);


               viewHolder.status.setText("Accepted");
               viewHolder.status.setTextColor(Color.parseColor("#006600"));



           }
           else if(tasks.get(position).status.rejected==true)
           {
               System.out.println("R"); 
              // viewHolder.reject.setImageResource(R.drawable.no);
               viewHolder.reject.setVisibility(View.INVISIBLE);
               viewHolder.accept.setVisibility(View.INVISIBLE);
               viewHolder.status.setVisibility(View.VISIBLE);
               viewHolder.status.setText("Rejected");
               viewHolder.status.setTextColor(Color.RED);
              // notifyDataSetChanged();
           }
           else
           {
               System.out.println("N"); 
               viewHolder.status.setVisibility(View.GONE);
               viewHolder.reject.setVisibility(View.VISIBLE);
               viewHolder.accept.setVisibility(View.VISIBLE);
              // viewHolder.accept.setImageResource(R.drawable.yes);
              // viewHolder.reject.setImageResource(R.drawable.no);

           }


           String arrayString[] = tasks.get(position).startDate.toString().split("\\s+");
           viewHolder.date.setText(arrayString[0].toString());
           viewHolder.time.setText(arrayString[1].toString());
           //viewHolder.companyName.setText(Home.taskObjList.get(position).companyName.toString());
           viewHolder.taskName.setText(tasks.get(position).taskName.toString());
           viewHolder.description.setText(tasks.get(position).description.toString());
           //viewHolder.taskType.setText(Home.taskObjList.get(position).task.toString());


            //viewHolder.category.setText(events.get(position).getCategory());



           viewHolder.accept.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v){
                // TODO Auto-generated method stub
                System.out.println("accept clicked");
                int position = (v.getTag() == null) ? -1 : (Integer) v.getTag();
                System.out.println(position);
                tasks.get(position).status.accepted=true;
                ListViewAdapter.this.notifyDataSetChanged();
            }

           });


           viewHolder.reject.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v){
                    // TODO Auto-generated method stub
                    System.out.println("reject clicked");
                    int position = (Integer) v.getTag();
                    tasks.get(position).status.rejected=true;
                    ListViewAdapter.this.notifyDataSetChanged();
                }
               });



            return convertView;



    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return tasks.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return tasks.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return tasks.indexOf(getItem(position));
    }

In my onclick() function clause where i am updating my dateset for adapter i need the position number of that item to update in my list:

viewHolder.accept.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v){
                // TODO Auto-generated method stub
                System.out.println("accept clicked");
                int position = (v.getTag() == null) ? -1 : (Integer) v.getTag();
                System.out.println(position);
                tasks.get(position).status.accepted=true;
                ListViewAdapter.this.notifyDataSetChanged();
            }

           });


           viewHolder.reject.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v){
                    // TODO Auto-generated method stub
                    System.out.println("reject clicked");
                    int position = (Integer) v.getTag();
                    tasks.get(position).status.rejected=true;
                    ListViewAdapter.this.notifyDataSetChanged();
                }
               });

Log:

FATAL EXCEPTION: main
Process: com.bisota, PID: 8917
java.lang.ArrayIndexOutOfBoundsException: length=27; index=-1
java.util.ArrayList.get(ArrayList.java:310)
com.bisota.utility.ListViewAdapter$1.onClick(ListViewAdapter.java:173)
at android.view.View.performClick(View.java:4761)
at android.view.View$PerformClick.run(View.java:19767)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
Shvet
  • 1,159
  • 1
  • 18
  • 30
Fay007
  • 2,707
  • 3
  • 28
  • 58

1 Answers1

3
viewHolder.reject.setTag(position);
viewHolder.accept.setTag(position);

Have you set the tag in your adapter getview code? No. Do it.

Before this line Resources resources = this.context.getResources(); add the above code.

Amrut Bidri
  • 6,276
  • 6
  • 38
  • 80
  • where should i do this?? when view!=null ?? @Amrut Bidri – Fay007 Mar 15 '15 at 09:27
  • before this line `Resources resources = this.context.getResources();` add the above code. – Amrut Bidri Mar 15 '15 at 09:28
  • wow man!! brilliant !! it worked!! but what actually i have done now and was missing before.......?? @Amrut – Fay007 Mar 15 '15 at 09:34
  • you were getting the tag for `viewHolder.accept` and `viewHolder.reject` inside its onclick. but you have not set any tag to these views. so these two line used to set the tag to your views and you can use them later using gettag. – Amrut Bidri Mar 15 '15 at 09:37
  • but i thought including settag(viewholder) is all i would need!! thanks man,u saved my day..... – Fay007 Mar 15 '15 at 09:41