#listview #android-layout #import-contacts
#listview #android-макет #импорт-контакты
Вопрос:
я хочу получить все контакты с телефона в нашем собственном представлении списка, но код открывает список контактов телефона … это мой код для класса, который я использую для получения контактов .. я использую кнопку контакта, чтобы запустить событие и получить контакты в моем представлении списка, но нулевое значениепроисходит исключение указателя в строке, отмеченной *…
ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ. заранее спасибо
public class BusinessCardActivity extends Activity {
private static final int PICK_CONTACT_REQUEST = 1;
private final ContactAccessor mContactAccessor = ContactAccessor.getInstance();
ImageButton contact_button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.allbuttons);
LinearLayout rlayout=new LinearLayout(this);
rlayout.setOrientation(LinearLayout.VERTICAL);
//RelativeLayout relativeLayout= (RelativeLayout)findViewById(R.layout.main);
//RelativeLayout relateLayout=(RelativeLayout)findViewById(R.layout.allbuttons);
LayoutInflater layoutInflater = getLayoutInflater();
rlayout.addView(layoutInflater.inflate(R.layout.main,null));
rlayout.addView(layoutInflater.inflate(R.layout.allbuttons,null));
//pickContact();
// Install a click handler on the Pick Contact button
contact_button=new ImageButton(getApplicationContext());
*** contact_button = (ImageButton)findViewById(R.id.button_contacts);
contact_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pickContact();
}
});
this.setContentView(rlayout);
}
protected void pickContact() {
startActivityForResult(mContactAccessor.getPickContactIntent(), PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_CONTACT_REQUEST amp;amp; resultCode == RESULT_OK) {
loadContactInfo(data.getData());
}
}
private void loadContactInfo(Uri contactUri) {
AsyncTask<Uri, Void, ContactInfo> task = new AsyncTask<Uri, Void, ContactInfo>() {
@Override
protected ContactInfo doInBackground(Uri... uris) {
return mContactAccessor.loadContact(getContentResolver(), uris[0]);
}
@Override
protected void onPostExecute(ContactInfo result) {
bindView(result);
}
};
task.execute(contactUri);
}
protected void bindView(ContactInfo contactInfo) {
TextView displayNameView = (TextView) findViewById(R.id.display_name_text_view);
displayNameView.setText(contactInfo.getDisplayName());
TextView phoneNumberView = (TextView)findViewById(R.id.phone_number_text_view);
phoneNumberView.setText(contactInfo.getPhoneNumber());
}
}
.
Ответ №1:
Вам нужно позвонить setContentView()
, прежде чем звонить findViewbyId()
, иначе у вас нет макета для поиска вашего представления
Комментарии:
1. эта строка setContentView() ошибочно закомментирована .. я запускал код с этой строкой и даже со всеми возможными редакциями, но с тем же исключением нулевого указателя, которое я получаю в той же строке .. одна вещь, которую я хочу спросить, что я включил свой TEXTVIEW в представление списка, но я обнаружил, чтоего необходимо добавить в другой макет, и он динамически добавляется в textview через listadapter .. не могли бы вы подсказать мне способ или любой другой возможный .. спасибо
2. является ли R.id.button_contacts внутри R.layout. allbuttons или R.макет. main если это так, вам обязательно нужно вызвать rlayout.findViewById(R.id.button_contacts)
3. Также есть ли какая-либо причина для создания макета программно, не могли бы вы использовать XML-файл макета?