片段中的textview.settext在第一次调用后不起作用

时间:2017-02-14 21:53:44

标签: android android-fragments

我正在尝试根据用户点击的内容更新片段中的textview。当我第一次加载活动时,它会设置textview。但是后来,即使调用了textview.settext,似乎没有任何改变。

在我的活动中,我发送了这样的新变量:

getSupportFragmentManager().beginTransaction().add(R.id.pager1, SecondFragment.newInstance(2, "Page # 2", nonStaticRandomInfoSt), "tag").commit();

我的片段:

 public static SecondFragment newInstance(int page, String title, String randomInfo) {
    SecondFragment fragmentSecond = new SecondFragment();
    Bundle args = new Bundle();
    args.putInt("someInt", page);
    args.putString("someTitle", title);
    args.putString("randomInfo", randomInfo);
    fragmentSecond.setArguments(args);


    return fragmentSecond;
}

// Store instance variables based on arguments passed
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    randomInfo = this.getArguments().getString("randomInfo");




}

// Inflate the view for the fragment based on layout XML
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_second, container, false);


    TextView randomInfoTV = (TextView) view.findViewById(R.id.randomInfo);

    randomInfoTV.setText(randomInfo); //this is getting called, but it's not changing the textview
    randomInfoTV.setMovementMethod(new ScrollingMovementMethod());


    return view;
}

编辑:

我在viewpager中有一个片段。首次输入活动时,会将默认值设置为片段中的textview。从我的活动布局中的列表视图,用户可以进行选择。选择一个项目后,我调用片段管理器并传递新的randomInfo变量。我想更新片段中的textview。我知道正确的值是通过调试传递的,我知道也调用了textview.settext。但由于某种原因,textview保持不变。你有什么建议吗?我甚至不知道从哪里开始修理它。

我如何创建片段:

    public static class MyPagerAdapter1 extends FragmentPagerAdapter {
    private static int NUM_ITEMS = 2;

    public MyPagerAdapter1(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    // Returns total number of pages
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    // Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: // Fragment # 0 - This will show FirstFragment
                return FirstFragment.newInstance(0, "Page # 1", imageURL);

            case 1: // Fragment # 0 - This will show FirstFragment different title
                return SecondFragment.newInstance(2, "Page # 2", randomInfoSt);


            default:
                return null;
        }
    }

点击活动代码;

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                long id) {
            // TODO Auto-generated method stub

            if (!fromservice) {
                Log.i(TAG, "about to start service");

             //starting service code...


                initFragmentVars(position); //this runs the fragmentmanager transaction

            }

1 个答案:

答案 0 :(得分:0)

public void onViewCreated(final View view, final Bundle savedInstanceState);而不是onCreateView()中设置文字。

后者对你正在做的事情(findViewById())没问题但是数据+视图的绑定应该在创建视图之后完成,特别是在Fragment中。

我知道这很令人困惑,但是Android Lifecycle是由数十位不同的软件工程师创造的混乱,我们在这里......