Android: Fragment cannot get activity

前端 未结 4 1402
情话喂你
情话喂你 2020-12-10 02:31

I have an activity which does a fragment transaction

DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transa         


        
相关标签:
4条回答
  • 2020-12-10 02:38

    if u need to call getActivity in OnCreateView, move all ur code from onCreateView to onActivityCreate and only left lines

    View v = inflater.inflate(R.layout.xxxx, container, false);
        return v;
    

    in onCreateView

    but i have a funny situation.

    in My onActivityCreated

    Spinner s1 = (Spinner) getActivity().findViewById(R.id.bitlength);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                getActivity(), R.array.bitlengths,
                android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(adapter);
    

    Sometime the onActivityCreated wont run (correctly!?) and hence the spinner s1 become empty.

    0 讨论(0)
  • 2020-12-10 02:39

    Your Fragment hasn't attached to the Activity yet, which also means your layout hasn't been inflated yet (See the Fragment lifecycle). The best solution here would be to add your String value as an argument to the Fragment via the Fragment.setArguments(Bundle) method. This can be retrieved in the receiving Fragment via the Fragment.getArguments() method.

    0 讨论(0)
  • 2020-12-10 02:43

    Make sure you call getActivity() in or after onAttach(), as before then it will return null.

    0 讨论(0)
  • 2020-12-10 02:54

    So i am also using the same fragment transaction manager and the only problem i can see with your code is that you define the TextView tv inside your onCreateView method of your newFragment class and then instantiate it as like this :

    public class AboutFragment extends Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.newFragment, container, false);
            TextView tv = (TextView) v.findViewById(R.id.textview);
            return v;
        }
    
        public void setMyString(String s) {
            tv.setText(s);
        }
    }
    

    I know it does'nt make really much sense but that is how i am running my code and it works fine :)

    0 讨论(0)
提交回复
热议问题