2017-02-14 26 views
0

我试图根据用户单击的内容更新片段中的textview。当我第一次加载活动时,它设置了textview。但后来,即使textview.settext被调用,似乎没有任何改变。片段中的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片段。首次输入活动时,默认值将设置为片段中的文本视图。从我的活动布局的列表视图中,用户可以进行选择。当选择一个项目时,我会调用片段管理器并传递新的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; 
     } 
    } 

Click事件代码;

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

别的地方做你该做的setText?我只看到一个 – yanivtwin

+1

什么是'nonStaticRandomInfoSt',也许它从来没有改变过? – WenChao

+0

请解释用户如何与您的应用进行交互以及发生了什么。然后解释你希望**发生的事情。 –

回答

0

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

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

我知道这是混乱的,但Android的生命周期是由几十个不同的软件工程师创造了一个烂摊子,我们在这里...

+1

这并没有太大的区别。 –

+0

它确实如果你使用片段。有回调存在的原因。 –

+0

不,它不。操作的方式非常好 –