Change TextView inside Fragment

2019-02-11 07:54发布

问题:

I followed this guy's tutorial on how to make an ActionBar. Let's say I want to change the TextView inside one of the fragments. So I added this on my StartActivity.java, under onCreate:

TextView textview = (TextView) findViewById(R.id.textView1);
textview.setText("HI!");

When I start my app, it crashes. Can somebody point me to the right direction?

I hope somebody takes the time to look at the guy's tutorial because his layout is basically the same as mine. Thank you.

回答1:

If you want change your component, I suggest you to make a method inside the fragment like this:

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    public class DetailFragment extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.details, container, false);
            return view;
        }


        public void setText(String text){
            TextView textView = (TextView) getView().findViewById(R.id.detailsText);
            textView.setText(text);
        }

    }


回答2:

Could you try to replace getView() with getActivity()?

public void setText(String text){
        TextView textView = (TextView) getActivity().findViewById(R.id.detailsText);
        textView.setText(text);
    }


回答3:

I found an answer here, and on Stack overflow

It uses the inflater: (for me it worked)


public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View inf = inflater.inflate(R.layout.fragment_place, container, false);
        TextView tv = (TextView) inf.findViewById(R.id.textview);
        tv.setText("New text");
        return inf;
    }
}