Изображение не работает должным образом в виде списка - PullRequest
0 голосов
/ 01 сентября 2011

Я пытаюсь реализовать представление списка, в котором по одному представлению изображения, которое можно щелкнуть в каждой строке, для этого я создал собственный адаптер и переопределил все его методы.Теперь моя проблема заключается в том, что когда я щелкаю этот вид изображения, не щелкая эту строку, он не работает должным образом, мой код ниже

protected void onListItemClick (ListView l, View v, конечная позиция int, длинный идентификатор) {

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

        }
    });

здесь, если я сначала нажму на строку, а затем на изображение, тогда оно будет работать нормально.Но если я нажимаю на изображение, не щелкая по строке (т.е. не выбирая строку), то она занимает позицию последней нажатой строки.

, пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

См. Мою функцию getView.В этом у меня есть один объект, из которого появляются в каждом списке.,,и пока я нажимаю кнопку вызова, я могу получить щелчок.

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;
        }
0 голосов
/ 02 сентября 2011

хорошо, наконец, копая так много в виде списка, я получил собственное решение, и это метод getView пользовательского адаптера, теперь всякий раз, когда я нажимаю на изображение, посмотрите аргумент getview (int position), который показывает позицию строки, которая была clicked.here я мой код, который я реализовал позже.

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...