在listview行android中选择imageview

时间:2013-01-03 11:09:48

标签: android listview imageview contacts

我目前正在开发一个需要显示联系人列表的应用程序。 您可以单击他们的姓名,它会显示一个新屏幕,显示有关此联系人的信息,并允许您通过选择他们的电话号码来呼叫他们。但是,

我想在列表中的名称旁边添加一个呼叫图标(当前为ImageView),当用户按下呼叫图标而不是名称时,手机会立即呼叫该用户,而不是转到信息页面。

我已经将图像添加到行中并使其可以点击,但我完全不知道如何为它实现onClickListener。我已经做了很多搜索,但是大多数教程似乎只解释了如何将图像添加到一行,而不是如何向它添加OnClickListener并让它做一些事情。

这里分别是List和Row的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

  <ListView android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <TextView android:id="@+id/android:empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/no_notes"/>
</LinearLayout>

这是Row的那个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/text1"
        android:layout_width="260dp"
        android:layout_height="60dp"
        android:focusable="false"
        android:textColor="#FFF"
        android:textSize="26sp" />

    <ImageView
        android:id="@+id/phoneButton"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignBottom="@+id/text1"
        android:layout_toRightOf="@id/text1"
        android:clickable="true"
        android:contentDescription="TODO"
        android:focusable="false"
        android:src="@android:drawable/sym_action_call" />

</RelativeLayout>

这是onListItemClick方法:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Intent i = new Intent(this, PersonalPhonebookView.class);
    i.putExtra(NotesDbAdapter.KEY_ROWID, id);
    startActivityForResult(i, ACTIVITY_VIEW);
}

有些人可能会认识到Android记事本教程中的代码片段。那是因为我使用了记事本代码来创建自定义联系人列表。我不是一个优秀的程序员,所以我需要一些东西开始。

这是屏幕的图像

enter image description here

我所拥有的是当用户选择其中一个名字时,他会进入该用户的信息页面。我想要的是当用户选择联系人右侧的电话时,电话会自动拨打该用户的电话号码。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

在填充列表中的每一行时,在适配器的getView()方法中编写imageView.setOnClickListener。

答案 1 :(得分:0)

尝试使用此getView方法创建custom BaseAdapter

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

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater viewInflater;
            viewInflater = getLayoutInflater();
            convertView = viewInflater.inflate(R.layout.listview, null);

            holder = new ViewHolder();
            holder.textview = (TextView) convertView.findViewById(R.id.TextView01);
            holder.imageview = (ImageView) convertView.findViewById(R.id.ImageView01);

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        if (holder.textview != null && position < data_text.length)
            holder.textview.setText(data_text[position]);
        if (holder.imageview != null && position < data_image.length){
            holder.imageview.setImageResource(data_image[position]);
            holder.imageview.setOnClickListener(new OnClickListener() {                 
                @Override
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(), "Image Clicked : "+position, Toast.LENGTH_LONG).show();                     
                }
            });
        }
        return convertView;
    }

    static class ViewHolder {
      TextView textview;
      ImageView imageview;
    }

感谢。

答案 2 :(得分:0)

您可以在 getView 方法中添加该组件的点击 这是它的一个小例子。

.......

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    .................
    .................
    .................
    txt_assassinate.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.d("Adapter k ", " position " + position);
            openpopup();
        }
    });
    return convertView;
}


.............