У меня есть два фрагмента и основной вид деятельности. Первый фрагмент FriendsFragment (расширяет ListFragment) отображается на экране, и когда пользователь щелкает элемент, основное действие заменяет FriendsFragment на FeedFragment, а затем вызывает метод из FeedFragment для обновления textView.
Я получаю сообщение об ошибке, что объект textView в классе FeedFragment является нулевым, даже если я создаю экземпляр с помощью метода findViewById
.
Я посмотрел на связанные вопросы и попробовал решения, но ничего не работает. Я пытался сделать getView().findViewById(R.id.feed_view)
, getActivity().findViewById(R.id.feed_view)
, и я пытался поместить их в onActivityCreated()
и onCreateView()
Единственное, что сработало, это написание этого кода в onActivityCreated ():
text = getView().findViewById(R.id.feed_view);
text.setText("some string");
но это не то, что я хочу
FeedFragments.java
public class FeedFragment extends Fragment {
private static String TAG = "Feed Fragment";
private TextView text;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "Entered FeedFragment.java onActivityCreated()");
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
Log.i(TAG, "Entered FeedFragment.java onCreateView()");
View v = inflater.inflate(R.layout.fragment_feed, container,false);;
text = v.findViewById(R.id.feed_view);
return v;
}
public void updateDisplay(int position)
{
Log.i(TAG, "FeedFragment.java: updateDisplay()");
text.setText(position);
}
MainActivity.java
// previously declared feedFragment: feedFragment = new FeedFragment();
public void onItemSelected(int position)
{
Log.i(TAG, "Entered onItemSelected(" + position + ")");
fragManager = getFragmentManager();
FragmentTransaction fragTransaction = fragManager.beginTransaction();
fragTransaction.replace(R.id.fragment_container, feedFragment, "feed_fragment");
fragTransaction.addToBackStack(null);
fragTransaction.commit();
feedFragment.updateDisplay(position);
}
fragment_feed.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/feed_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/greeting" />
</ScrollView>
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />