-1

ChatFragment.java:

public class ChatFragment extends Fragment {
private FirebaseListAdapter<ChatMessage> adapter;
View RootView;
EmojiconEditText emojiconEditText;
ImageView emojiButton,submitButton;
EmojIconActions emojIconActions;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View RootView = inflater.inflate(R.layout.fragment_chat,container,false);
    this.RootView = RootView;
    return RootView;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//:55
    emojiButton = (ImageView)this.RootView.findViewById(R.id.emoji_button);
    submitButton = (ImageView)this.RootView.findViewById(R.id.submit_button);
    emojiconEditText = (EmojiconEditText)this.RootView.findViewById(R.id.emojicon_edit_text);
    emojIconActions = new EmojIconActions(getActivity().getApplicationContext(),this.RootView,emojiButton,emojiconEditText);
    emojIconActions.ShowEmojicon();

error:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
    at dev.edmt.chatapp.ChatFragment.onCreate(ChatFragment.java:55)

I tried another way(ChatFragment.java):

public class ChatFragment extends Fragment {
private FirebaseListAdapter<ChatMessage> adapter;
View RootView;
EmojiconEditText emojiconEditText;
ImageView emojiButton,submitButton;
EmojIconActions emojIconActions;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View RootView = inflater.inflate(R.layout.fragment_chat,container,false);
    this.RootView = RootView;
    this.emojiButton = (ImageView)RootView.findViewById(R.id.emoji_button);
    this.submitButton = (ImageView)RootView.findViewById(R.id.submit_button);
    this.emojiconEditText = (EmojiconEditText)RootView.findViewById(R.id.emojicon_edit_text);
    return RootView;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//:60
    emojIconActions = new EmojIconActions(getActivity().getApplicationContext(),this.RootView,this.emojiButton,this.emojiconEditText);
    emojIconActions.ShowEmojicon();

error:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void hani.momanii.supernova_emoji_library.Helper.EmojiconEditText.setOnFocusChangeListener(android.view.View$OnFocusChangeListener)' on a null object reference
    at hani.momanii.supernova_emoji_library.Actions.EmojIconActions.setFocusListener(EmojIconActions.java:241)
    at hani.momanii.supernova_emoji_library.Actions.EmojIconActions.<init>(EmojIconActions.java:64)
    at dev.edmt.chatapp.ChatFragment.onCreate(ChatFragment.java:60)

I am new and do not understand the fragment..............................................................................................................................

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
VitVit
  • 103
  • 1
  • 2
  • 5
  • due to the fragment lifecycle onCreate execute before onCreateView, then it seems you should move code from onCreate to onCreateView method, right after initializing your variables – Farrokh Sep 23 '18 at 06:02

2 Answers2

0

Move this code:

 emojIconActions = new EmojIconActions(getActivity().getApplicationContext(),this.RootView,this.emojiButton,this.emojiconEditText);
    emojIconActions.ShowEmojicon();

to onCreateView method just before return RootView;

Suraj Vaishnav
  • 7,777
  • 4
  • 43
  • 46
0

The correct form of taking a reference to your views in fragments is in your onCreateView:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View RootView = inflater.inflate(R.layout.fragment_chat,container,false);
    this.RootView = RootView;
    this.emojiButton = (ImageView)RootView.findViewById(R.id.emoji_button);
    this.submitButton = (ImageView)RootView.findViewById(R.id.submit_button);
    this.emojiconEditText = (EmojiconEditText)RootView.findViewById(R.id.emojicon_edit_text);

    // Your view objects are holding a reference
    emojIconActions = new EmojIconActions(getActivity().getApplicationContext(),this.RootView,this.emojiButton,this.emojiconEditText);
    emojIconActions.ShowEmojicon();
}

As you can see in the image below the onCreate method gets called before onCreateView.

Fragment life cycle

Sdghasemi
  • 5,370
  • 1
  • 34
  • 42