Я создал TabLayout с ViewPager, и я хочу, чтобы TextViews внутри фрагментов моей вкладки отображали имя и фамилию текущего контакта.
Это мой код:
В активности:
Bundle bundle = new Bundle();
bundle.putParcelable("currentContactUri", mCurrentContactUri);
ContactDetailFragment1 fragment1 = new ContactDetailFragment1();
fragment1.setArguments(bundle);
getSupportFragmentManager().beginTransaction().add(R.id.pager, fragment1).commit();
В моем фрагменте:
public final class ContactDetailFragment1 extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final int CONTACT_LOADER = 0;
private Uri mCurrentContactUri;
private TextView mFirstNameTextView;
private TextView mLastNameTextView;
private long mCurrentContactId;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.fragment_contact_detail_fragment1, container, false);
mFirstNameTextView = rootView.findViewById(R.id.contact_detail_firstname);
mLastNameTextView = rootView.findViewById(R.id.contact_detail_lastname);
if (getArguments() != null) {
mCurrentContactUri = getArguments().getParcelable("currentContactUri");
mCurrentContactId = ContentUris.parseId(mCurrentContactUri);
}
getLoaderManager().initLoader(CONTACT_LOADER, null, this);
return rootView;
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
String[] projection = {
ContactContract.ContactEntry._ID,
ContactContract.ContactEntry.COLUMN_FIRSTNAME,
ContactContract.ContactEntry.COLUMN_LASTNAME};
String selection = ContactContract.ContactEntry._ID + " = ?";
String[] selectionArgs = new String[]{String.valueOf(mCurrentContactId)};
return new CursorLoader(getActivity().getApplicationContext(),
ContactContract.ContactEntry.CONTENT_URI,
projection,
selection,
selectionArgs,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor == null || cursor.getCount() < 1) {
return;
}
if (cursor.moveToFirst()) {
int firstnameColumnIndex = cursor.getColumnIndex(ContactContract.ContactEntry.COLUMN_FIRSTNAME);
int lastnameColumnIndex = cursor.getColumnIndex(ContactContract.ContactEntry.COLUMN_LASTNAME);
String firstname = cursor.getString(firstnameColumnIndex);
String lastname = cursor.getString(lastnameColumnIndex);
mFirstNameTextView.setText(firstname);
mLastNameTextView.setText(lastname);
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mFirstNameTextView.setText("");
mLastNameTextView.setText("");
}
}
Расположение фрагмента:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="@string/first_name">
</TextView>
<TextView
android:id="@+id/contact_detail_firstname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="firstname goes here">
</TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="@string/last_name">
</TextView>
<TextView
android:id="@+id/contact_detail_lastname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:text="lastname goes here">
</TextView>
</LinearLayout>
Я не получаю сообщение об ошибке или что-то еще, но образец текста, который я установил для TextViews внутри моего XML-макета, не изменится, даже жесткие имя и фамилия содержит правильные значения.