ListView的按钮不显示

时间:2017-02-18 22:08:08

标签: android xml listview android-studio

请帮助我解决以下问题。我正在尝试开发一个联系人目录作为我的应用程序的一部分,允许用户单击每个联系人旁边的呼叫和电子邮件按钮并执行相关操作。该目录显示正常:

1)运行应用程序时,不显示phonebook_row.xml类中的call和email按钮。我该如何解决这个问题?

2)如何拨打电话和电子邮件可点击按钮,只需输入电话号码和电子邮件(不含“姓名:”和“电子邮件”),然后打开电话拨号器中的号码/用电子邮件地址创建新邮件? 我的代码如下......

Directory.java:

import android.graphics.Bitmap;

public class Directory {

private Bitmap mAvatar;
private String mName;
private String mPhone;
private String mEmail;
private String mLocation;

public Directory(Bitmap mAvatar, String mName, String mPhone, String mEmail, String mLocation) {
    this.mAvatar = mAvatar;
    this.mName = "Name: " + mName;
    this.mPhone = "Phone Extension: " + mPhone;
    this.mEmail = "Email: " + mEmail;
    this.mLocation = "Location: " + mLocation;
}

public Bitmap getmAvatar() {
    return mAvatar;
}

public void setmAvatar(Bitmap mAvatar) {
    this.mAvatar = mAvatar;
}

public String getmName() {
    return mName;
}

public void setmName(String mName) {
    this.mName = mName;
}

public String getmPhone() {
    return mPhone;
}

public void setmPhone(String mPhone) {
    this.mPhone = mPhone;
}

public String getmEmail() {
    return mEmail;
}

public void setmEmail(String mEmail) {
    this.mEmail = mEmail;
}

public String getmLocation() {
    return mLocation;
}

public void setmLocation(String mLocation) {
    this.mLocation = mLocation;
}


}

DirectoryAdapter.java:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class DirectoryAdapter extends BaseAdapter{

private Context mContext;
private List<Directory> mListDirectory;

public DirectoryAdapter(Context context, List<Directory> list) {
    mContext = context;
    mListDirectory = list;
}
@Override
public int getCount() {
    return mListDirectory.size();
}

@Override
public Object getItem(int i) {
    return mListDirectory.get(i);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    Directory entry = mListDirectory.get(i);

    if(view == null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        view = inflater.inflate(R.layout.phonebook_row, null);
    }

    ImageView ivAvatar = (ImageView)view.findViewById(R.id.imgAvatar);
    ivAvatar.setImageBitmap(entry.getmAvatar());

    TextView tvName = (TextView)view.findViewById(R.id.tvName);
    tvName.setText(entry.getmName());

    TextView tvPhone = (TextView)view.findViewById(R.id.tvPhone);
    tvPhone.setText(entry.getmPhone());

    TextView tvEmail = (TextView)view.findViewById(R.id.tvEmail);
    tvEmail.setText(entry.getmEmail());

    TextView tvLocation = (TextView)view.findViewById(R.id.tvLocation);
    tvLocation.setText(entry.getmLocation());
    return view;
}
}

ListDirectory.java:

import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class ListDirectory extends AppCompatActivity {

private ListView lvDirectory;
private ImageView buttonPhone;
private ImageView buttonEmail;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_directory);

    lvDirectory = (ListView)findViewById(R.id.listDirectory);
    buttonPhone = (ImageView) findViewById(R.id.ivPhone);
    buttonEmail = (ImageView) findViewById(R.id.ivEmail);

    List<Directory> listDirectory = new ArrayList<Directory>();
    listDirectory.add(new Directory(BitmapFactory.decodeResource(getResources(), R.drawable.johnsmith), "Mr John Smith", "1234", "j.smith@example.com", "UK"));
    listDirectory.add(new Directory(BitmapFactory.decodeResource(getResources(), R.drawable.jack), "Mr Jack Smith", "3242", "jack.smith@example.com", "USA"));
    DirectoryAdapter adapter = new DirectoryAdapter(this, listDirectory);
    lvDirectory.setAdapter(adapter);
}
}

activity_list_directory.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_list_contacts"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.XXXXX.computerscienceinduction.ListDirectory">

<ListView
    android:id="@+id/listDirectory"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
</ListView>

</LinearLayout>

phonebook_row.xml:

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

<ImageView android:id="@+id/imgAvatar"
    android:layout_width="70dip"
    android:layout_height="70dip"
    android:scaleType="fitCenter"
    android:src="@mipmap/ic_launcher"/>

<LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <LinearLayout android:orientation="horizontal"
        android:layout_width="243dp"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/tvName"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_centerHorizontal="true"/>

    </LinearLayout>

    <LinearLayout android:orientation="horizontal"
        android:layout_width="243dp"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/tvPhone"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"/>
        <ImageView android:id="@+id/ivPhone"
            android:layout_width="70dip"
            android:layout_height="70dip"
            android:scaleType="fitCenter"
            android:src="@drawable/call_icon"/>

    </LinearLayout>


    <LinearLayout android:orientation="horizontal"
        android:layout_width="244dp"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/tvEmail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"/>
        <ImageView android:id="@+id/ivEmail"
            android:layout_width="70dip"
            android:layout_height="70dip"
            android:scaleType="fitCenter"
            android:src="@drawable/email_icon"/>

    </LinearLayout>


    <LinearLayout android:orientation="horizontal"
        android:layout_width="243dp"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/tvLocation"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"/>

    </LinearLayout>


</LinearLayout>

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

在适配器类的get view方法中,您可以执行以下操作,请注意我在示例中使用了一个imageview,它仅用于调用部分。按钮具有相同的实现。

 ImageView icon = (ImageView)view.findViewById(R.id.callicon);
 icon.setImageResource(R.drawable.ic_action_call);
    icon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //----create new intent for the call action and give it the number
            //this will just start the dailer but not complete the action
            Intent callIntent = new Intent(Intent.ACTION_DIAL,
                    Uri.parse("tel:" + entry.getmPhone()));
            callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(callIntent);
        }
    });