Намерение не работает внутри фрагмента, чтобы открыть Activity - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь использовать Intent внутри класса PlaceholderFragment фрагмента TabActivity, чтобы открыть следующее действие. Вот мой код.

PlaceHolderFragment класс

    public ImageButton Next;
     public View onCreateView(
            @NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View rootView=inflater.inflate(R.layout.fragment_main_tab,container,true);
        Next=(ImageButton)rootView.findViewById(R.id.btn_expand);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updatedetails();
            }
        });

        View root=null;
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1:
                 root = inflater.inflate(R.layout.fragment_main_tab, container, false);
                break;
            case 2:
                    root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
                    break;
        }
        return root;
    }
public void updatedetails(){
    Intent intent = new Intent(getActivity(), Enquiery_followup.class);
    startActivity(intent);
}

Ответы [ 3 ]

0 голосов
/ 27 июня 2019

getActivity() - не лучший способ получить контекст во фрагменте. И сделайте attachToRoot = false при создании представления Попробуйте следующий код

public class yourClass{
public ImageButton Next;

 Context context;
@Override public void onAttach(Context context) { 
super.onAttach(context);
 this.context=context; 
}
     public View onCreateView(
            @NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        View rootView=inflater.inflate(R.layout.fragment_main_tab,container,false);
        Next=(ImageButton)rootView.findViewById(R.id.btn_expand);
        Next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updatedetails();
            }
        });

        View root=null;
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1:
                 root = inflater.inflate(R.layout.fragment_main_tab, container, false);
                break;
            case 2:
                    root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
                    break;
        }
        return root;
    }
public void updatedetails(){
    Intent intent = new Intent(context, Enquiery_followup.class);
    startActivity(intent);
}
}

Попробуйте и опубликуйте обновление.

Редактировать 1: Попробуйте вернуть rootView вместо root в onCreateView ().

0 голосов
/ 27 июня 2019
public class TestFragment extends Fragment {

public ImageButton Next;

public View onCreateView(
        @NonNull LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main_tab, container, false);


    View root = null;
    switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
        case 1:
            root = inflater.inflate(R.layout.fragment_main_tab, container, false);
            break;
        case 2:
            root = inflater.inflate(R.layout.fragment_team_screen_, container, false);
            break;
    }

    Next = (ImageButton) rootView.findViewById(R.id.btn_expand);
    Next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            updatedetails();
        }
    });

    return rootView;
}

public void updatedetails() {
    Intent intent = new Intent(getActivity(), Enquiery_followup.class);
    startActivity(intent);
}
}

Переставьте код следующим образом.И убедитесь, что оба xml-файла содержат ImageButton с идентификатором - btn_expand

Проблема с вашим кодом заключалась в том, что onClickListener был до установки view.

0 голосов
/ 27 июня 2019

Можете ли вы попробовать ниже.Последний параметр инфлятора, сделайте его ложным.

View rootView = inflater.inflate(R.layout.fragment_main_tab,container,false);

Никогда не передавайте attachToRoot как true, если вы не несете ответственности за добавление дочернего представления к родительскому.

Подробнее оэто из этого ответа @ СЕЙЧАС ИЛИ СЕЙЧАС

...