Android setText () внутри фрагмента - PullRequest
0 голосов
/ 30 мая 2018

Я создал 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-макета, не изменится, даже жесткие имя и фамилия содержит правильные значения.

...