开发者

Image Viewnot working properly in list view

i am tryin开发者_StackOverflow社区g to implement list view that has one click-able image View in each row, for this I have created custom Adapter and override all its methods. Now my problem is that when i click this image view without clicking that row it is not functioning properly my code is below

protected void onListItemClick( ListView l, View v, final int position, long id) {

    super.onListItemClick(l, v, position, id);

     RowData rowObject = (RowData) l.getItemAtPosition(position);
     contactId= rowObject.getTextId(); 

//contactId gives the position of the row clicked in the list view.

     Log.e("on item clicked", contactId.toString());

     ImageView nextView = rowObject.getImageobject();
     nextView.setClickable(true);
     nextView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                // TODO Auto-generated method stub
            Log.i("Value of row id", String.valueOf(position));
                Intent myintent = new Intent(v.getContext(),Info.class);
                myintent.putExtra("ContactId", contactId);
                v.getContext().startActivity(myintent);

        }
    });

here if i click on the row first and then image view then it is working fine. But if i click on image view without clicking on the row (i.e., without selecting the row), then it takes the position of last row clicked.

please help me.


See My getView Function. In that i have one object from which appear on every List. . . and while i click on the Button of call i can able to get the click.

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

            View v = convertView;
            if (v == null) 
            {
                try
                {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.pantry_list_row, null);



                    }
                catch(Exception e)
                {
                    System.out.println("Excption Caught"+e);
                }
            }
            PantreisInfo p = items.get(position);


            if (p != null) 
            {
                TextView name = (TextView) v.findViewById(R.id.pantryName);
                TextView add1= (TextView) v.findViewById(R.id.pantryAddress1);
                TextView add2=(TextView)v.findViewById(R.id.pantryAddress2);
                TextView phno = (TextView) v.findViewById(R.id.pantryPhno);
                TextView distTime = (TextView) v.findViewById(R.id.distTime);

//

                if (name != null)
                {
                    name.setText(p.getName().get(0).toString());
                }
                if (add1 != null) 
                {
                    add1.setText(p.getAddress1().get(0).toString());
                }
                if (add2 != null) 
                {
                    add2.setText(p.getAddress2().get(0).toString());
                }
                if (phno != null) 
                {
                    phno.setText(p.getPhone().get(0).toString());

                }
                if (distTime!= null) 
                {
                    distTime.setText("Distribution Time: "+p.getDistTime().get(0).toString());
                }
            }
                ImageView phbtn=(ImageView)v.findViewById(R.id.phbtn);
                phbtn.setOnClickListener(new View.OnClickListener() 
                {

                    @Override
                    public void onClick(View arg0) 
                    {

                        final AlertDialog.Builder dialog=new AlertDialog.Builder(PantriesListActivity.this);
                        PantreisInfo p=items.get(position);

                        String tempPhone=p.getPhone().get(0).toString();
                        String phoneNumber="";
                        for(int i=0;i<tempPhone.length();i++)
                        {
                             if (Character.isDigit(tempPhone.charAt(i)))
                             {
                                 System.out.println(tempPhone.charAt(i));
                                 phoneNumber=phoneNumber+tempPhone.charAt(i);
                             }

                        }

                        dialog.setMessage("Press ok to Dial "+phoneNumber+",otherwise click on cancel to discard.");
                        final String number="tel:" +phoneNumber.trim();

                        dialog.setPositiveButton("Ok",new DialogInterface.OnClickListener() 
                        {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) 
                            {
                                // TODO Auto-generated method stub

                                  Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse(number)); 
                                    startActivity(callIntent);

                                dialog.setCancelable(true);
                            }
                        });
                        dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dfdialog, int which)
                            {
                                // TODO Auto-generated method stub
                                dialog.setCancelable(true);
                            }
                        });

                        dialog.show();
                        //Toast.makeText(PantriesListActivity.this,""+p.getPhone().get(0), Toast.LENGTH_SHORT).show();



                    }
                });


                return v;
        }


ok finally digging so much in list view i got a solution by own,and that isthe getView method of custom adaptor,now whenever i click the image View the (int position)argument of getview gives the position of the row that was clicked.here i my code whitch i implemented later.

private class CustomAdapter extends ArrayAdapter<RowData> {
    public CustomAdapter(Context context,int resource,int textViewResourceId,List<RowData> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        TextView Name     = null;
        TextView JobTitle   = null;
        ImageView Emailimage = null;
        ImageView Phoneimage = null;
        ImageView nextView = null;
        RowData rowData   = getItem(position);

        if(null == convertView){
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.contact_found_list_item_row, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }

        String positionId = String.valueOf(position);
        holder = (ViewHolder) convertView.getTag();
        Name = holder.gettitle();
        Name.setText(rowData.mTitle);
        JobTitle = holder.getdetail();
        JobTitle.setText(rowData.mDetail);                                                     
        Emailimage=holder.getImage();
        Emailimage.setImageResource(rowData.phoneId);
        Phoneimage = holder.getphoneImage();
        Phoneimage.setImageResource(rowData.emailId);
        nextView = holder.getNextViewObject();
        nextView.setTag(positionId);
        nextView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ImageView iv = (ImageView)v;
                String rowid = (String)iv.getTag();
                Intent myintent = new Intent(v.getContext(),Info.class);
                myintent.putExtra("ContactId", rowid);
                v.getContext().startActivity(myintent);
            }
        });

        return convertView;
    }

    private class ViewHolder {
        private View mRow;

        private TextView Name   = null;
        private TextView JobTitle = null;
        private ImageView Emaillogo = null; 
        private ImageView phonelogo = null;
        private ImageView nextViewlogo = null;

        public ViewHolder(View row) {
            mRow = row;
        }

        public TextView gettitle() {
            if(null == Name){
                Name = (TextView) mRow.findViewById(R.id.txtfirstname);
            }
            return Name;
        }     

        public TextView getdetail() {
            if(null == JobTitle){
                JobTitle = (TextView) mRow.findViewById(R.id.txtjobtitle);
            }
            return JobTitle;
        }

        public ImageView getImage() {
            if(null == Emaillogo){
                Emaillogo = (ImageView) mRow.findViewById(R.id.emaillogo);
            }
            return Emaillogo;
        }
        public ImageView getphoneImage(){
            if(null == phonelogo){
                phonelogo = (ImageView) mRow.findViewById(R.id.mobilelogo);
            }return phonelogo;
        }  
        public ImageView getNextViewObject(){
            if(null == nextViewlogo){
                nextViewlogo = (ImageView)mRow.findViewById(R.id.nextbutton);
            }return nextViewlogo;
        }

    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜