, пожалуйста, вы можете помочь мне со следующей проблемой. Я пытаюсь разработать каталог контактов как часть моего приложения, которое позволяет пользователю нажимать кнопку вызова и электронной почты рядом с каждым контактом и выполнять соответствующие действия. Однако в каталоге отображается сообщение:Кнопки для ListView, не отображающие
1) Кнопки вызова и электронной почты в классе phonebook_row.xml не отображаются при запуске приложения. Как я могу исправить эту проблему?
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", "[email protected]", "UK"));
listDirectory.add(new Directory(BitmapFactory.decodeResource(getResources(), R.drawable.jack), "Mr Jack Smith", "3242", "[email protected]", "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>
Чтобы отобразить ImageViews, попробуйте заменить layout_width в TextViews (tvPhone, tvEmail) на "wrap_content". Используйте метод substring(), чтобы получить только часть строки, например. entry.getmPhone(). substring (17), чтобы получить номер телефона без «Расширение телефона:». Надеюсь, это поможет! –