Проблемы с фрагментами Android - PullRequest
4 голосов
/ 16 ноября 2011

Мне трудно получить фрагменты для обновления своих представлений ... В частности, фрагменты, которые существуют в ViewPager с ActionBarSherlock.

Вот мой класс фрагментов:

public class SearchFragment extends Fragment{
private String mInterests;
private String mSentence;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.bounty_search_layout, container, false);
}   

@Override
public void onResume() {
    super.onResume();
    getUserInterests();
}

/*
 * Get the users interests from the underlying
 * data store.
 */
public void getUserInterests() {
    TextView tv = (TextView) getView().findViewById(R.id.bounty_search_txtResult);
    DatabaseHelper dbHelper = new DatabaseHelper(getActivity());
    SQLiteDatabase db = dbHelper.getReadableDatabase();

    Cursor cursor = db.query(DatabaseConstants.TABLE_NAME, null, null, null, null, null, null);
    cursor.moveToFirst();
    mInterests = cursor.getString(cursor.getColumnIndex(DatabaseConstants.INTERESTS));
    if(mInterests.length() == 0) {
        mSentence = "You have no interests.";
    }
    else {
        mSentence = "Your interests are: ";
        mInterests = cursor.getString(cursor.getColumnIndex(DatabaseConstants.INTERESTS));
    }
    tv.setText(mSentence + mInterests);
    cursor.close();
    db.close();
    dbHelper.close();
}
}

способ вызова этого фрагмента из моего FragmentActivity заключается в следующем ...

SearchFragment searchInterests = new SearchFragment();

Мои представления во фрагменте правильно настроены при первом запуске, но когда я вызываю что-то вроде ...

searchInterests.update();

из FragmentActivity, чтобы обновить некоторые представления, getView () из

TextView tv = (TextView) getView().findViewById(R.id.results);

возвращает ноль и завершается ошибкой.Я изо всех сил пытаюсь понять, почему это так. Кто-то сказал мне, что это потому, что мой фрагмент не привязан ни к чему ... Я не совсем понимаю эту часть и не только это, но я просто не понимаю, почему getView ()указывает на ноль, если onCreateView был успешным в первый раз?Разве getView () не возвращает представление, возвращаемое onCreateView?Вот полный набор кодов: https://gist.github.com/1369653

1 Ответ

3 голосов
/ 17 ноября 2011

Итак, через некоторое время я понял это ... Проблема возникла из-за того, как FragmentPagerAdapter возвращал фрагмент ...

@Override
public Fragment getItem(int position) {
    return Fragment.instantiate(mContext, mTabs.get(position), null);
}

Это возвращало новый фрагмент каждый раз, когда getItem () былназывается.Тем не менее, у меня также было ...

searchInterests = new SearchFragment();
selectInterests = new SelectFragment();

, который создавал новый фрагмент перед его добавлением в адаптер.Таким образом, адаптер получал новый фрагмент И возвращал новый фрагмент вместо того, чтобы вернуть тот, который я ему дал.Поэтому я просто изменил функцию getItem (), чтобы она возвращала новый фрагмент, если ни один из этого класса уже не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...