简体   繁体   English

影像检视无法在清单检视中正常运作

[英]Image Viewnot working properly in list view

i am trying 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. 我正在尝试实现每行都有一个可单击图像的View的列表视图,为此,我创建了自定义适配器并覆盖了其所有方法。 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) { 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 (ie, without selecting the row), then it takes the position of last row clicked. 但是,如果我单击图像视图而不单击该行(即不选择该行),则它将采用最后单击的行的位置。

please help me. 请帮我。

See My getView Function. 请参阅我的getView函数。 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. 好的,最后在列表视图中进行了很多工作,我自己得到了一个解决方案,那就是自定义适配器的getView方法,现在每当我单击图像时,getview的(int位置)参数都会给出被单击的行的位置。我我稍后执行的代码问题。

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;
        }

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM