2

Я хочу, чтобы setText отображал текстовое изображение из фрагмента в другой фрагмент.Android set Textview из другого фрагмента

Как бы я это сделал? Сейчас я получаю: java.lang.NullPointerException: попытка вызвать виртуальный метод «недействительный android.widget.TextView.setText (java.lang.CharSequence)» на нулевой ссылке на объект

FragmentRonde1.java

lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      ListClickedFragment newFragment = new ListClickedFragment(); 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

      transaction.replace(R.id.fragment_container, newFragment); 
      transaction.addToBackStack(null); 

      transaction.commit(); 

      Cursor c2 = db.getIdOfSelectedItem(id); 

      ListClickedFragment fragmentRonde1 = new ListClickedFragment(); 

      if (c2 != null) { 
       c2.moveToFirst(); 

       // i want to set listClickedTitle from here but listClickedTitle is in ListClickedFragment 
       fragmentRonde1.gettext(c2.getString(c2.getColumnIndex("title"))); 

      } 

     } 
    }); 

Вот класс для фрагмента, где ListCLickedTitle является: ListClickedFragment

public class ListClickedFragment extends android.support.v4.app.Fragment { 

TextView tvTitle, tvDesc, tv, oop; 


public ListClickedFragment() { 
    // Required empty public constructor 
} 




@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View rootview2 = inflater.inflate(R.layout.fragment_list_clicked, container, false); 

    tvTitle = (TextView)getActivity().findViewById(R.id.listClickedTitle); 

    return rootview2; 
} 

public void gettext (String text) { 

    tvTitle.setText(text); 

} 
} 

LogCat

10-28 09:37:25.373 14349-14349/justin.drawer E/InputEventReceiver: Exception dispatching input event. 
10-28 09:37:25.381 14349-14349/justin.drawer E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at justin.drawer.ListClickedFragment.gettext(ListClickedFragment.java:40) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at justin.drawer.FragmentRonde1$1.onItemClick(FragmentRonde1.java:71) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.widget.AbsListView.performItemClick(AbsListView.java:1145) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.widget.AbsListView.onTouchUp(AbsListView.java:3891) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.widget.AbsListView.onTouchEvent(AbsListView.java:3656) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.View.dispatchTouchEvent(View.java:9294) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.app.Activity.dispatchTouchEvent(Activity.java:2765) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.View.dispatchPointerEvent(View.java:9514) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5896) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI:  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857) 
10-28 09:37:25.420 14349-14349/justin.drawer E/MessageQueue-JNI: at android.view.ViewRootImpl$WindowInputEventReceive 
10-28 09:37:25.420 14349-14349/justin.drawer D/AndroidRuntime: Shutting down VM 
+1

очевидно, что это собиралось быть нулевой объект, попробуйте создать метод в фрагменте, который удерживать TextView и называют этот метод после приема фрагмента экземпляра из другого фрагмента. – AAnkit

+2

Посмотрите на это: https://stackoverflow.com/questions/17436298/how-to-pass-a-variable-from-activity-to-fragment-and-pass-it-back Вы можете передать строки в фрагмент с помощью метода setArguments (Bundle). –

+0

Итак, я сделал метод, но он по-прежнему дает мне nullpointerEcxeption. Можете ли вы заглянуть в мой обновленный вопрос? @AndreiVerdes –

ответ

0

Вы можете управлять всеми вашими действиями между фрагментами и деятельности с использованием реализации шины. Этот урок поможет вам! Tutroial...

1

Вы получаете исключение нулевого указателя, потому что ваши представления раздуты после вызова onCreateView. Вместо этого вы должны передать параметр Bundle или String в конструкторе для вашего ListClickedFrgament, а затем использовать его для установки текста.

ListClickedFragment:

String textToSet; 
    public ListClickedFragment(String text) { 
      this.textToSet = text; 
    } 

Установить этот текст вашего TextView в методе OnViewCreated из ListClickedFragment.

В fragmentRonde1:

ListClickedFragment fragmentRonde1 = new ListClickedFragment(c2.getString(c2.getColumnIndex("title"))); 

Надеется, что это помогает.

+0

Итак, где вы помещаете this.textToSet, где я помещаю текст и текст в текст? Я еще не совсем понимаю, но я вижу, куда вы идете @hadi –

+0

Нет Джастин, точка textview - это компонент пользовательского интерфейса, вы можете получить его ссылку только после завершения метода onCreateView. Что вы сделаете, это переопределить метод onViewCreated в вашем ListClickedFragment, в этом методе вы можете использовать строку _textToSet_ и установить его в текстовое представление. – Hadi

+0

Я понимаю, что вы имеете в виду! Я попробую его и приму в качестве ответа, если он сработает! @hadi –

0

Шаг 1

В фрагменте А, используйте callback, чтобы получить доступ к деятельности. Вы можете узнать, как использовать его здесь. Fragment Callbacks

Шаг 2

В деятельности, использование FragmentManager найти фрагмент В, а затем вы можете получить доступ к TextView в Фрагмент B

0
tvTitle = (TextView)getActivity().findViewById(R.id.listClickedTitle); 

найти tvTitle в вашей деятельности вместо фрагмента

1

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

Редактировать: Почему вы получили исключение NullPointerException во второй раз? Потому что вы только вызвали конструктор для ListClickedFragment fragmentRonde1. Не совершая с ней транзакции, не добавляя/не заменяя ее в некотором FrameLayout, не будет запускать onCreateView() ... представление не будет завышено, поэтому TextView будет пустым.

lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     ListClickedFragment newFragment = ListClickedFragment.newInstance(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack(null); 

     transaction.commit(); 

     Cursor c2 = db.getIdOfSelectedItem(id); 

     ListClickedFragment fragmentRonde1; 

     if (c2 != null) { 
      c2.moveToFirst(); 
      fragmentRonde1 = ListClickedFragment.newInstance(c2.getString(c2.getColumnIndex("title"))); 
     } else { 
      fragmentRonde1 = ListClickedFragment.newInstance(); 
     } 

    } 
}); 

и это

public class ListClickedFragment extends android.support.v4.app.Fragment { 

public static final String STRING_TAG = "some_tag_in_here"; 

public static ListClickedFragment newInstance() { 
    return new ListClickedFragment(); 
} 

public static ListClickedFragment newInstance(String pString) { 
    ListClickedFragment listClickedFragment = newInstance(); 
    Bundle bundle = new Bundle(); 
    bundle.putString(STRING_TAG, pString); 
} 

TextView tvTitle; 
TextView tvDesc; 
TextView tv; 
TextView oop; 

public ListClickedFragment() { 
} 

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View rootview2 = inflater.inflate(R.layout.fragment_list_clicked, container, false); 

    tvTitle = (TextView) getActivity().findViewById(R.id.listClickedTitle); 
    if (getArguments() != null && getArguments().getString(STRING_TAG) != null) { 
     tvTitle.setText(getArguments().getString(STRING_TAG)); 
    } 
    return rootview2; 
} 
} 
+1

Если это определенно попробует это, когда я вернусь домой через час или 2! @AndreiVerdes –

Смежные вопросы