2017-03-23 130 views
0

我遇到了片段问题。如何在另一个片段的片段中设置文本按钮

在我的活动我打电话片段1

- >在片段1,我叫Fragment2

- >在Fragment2,当我点击一个按钮,按钮的片段1的文本将被改变(我不知道如何做到这一点)

这是我的源代码:

activity_main.xml中

<Button 
    android:id="@+id/btnFragment1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Call Fragment 1" /> 

<LinearLayout 
    android:id="@+id/lnFragment1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"></LinearLayout> 

fragment1.xml:

<Button 
    android:id="@+id/btnFragment2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Call Fragment 2" /> 

<LinearLayout 
    android:id="@+id/lnFragment2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"></LinearLayout> 

fragment2.xml:

<Button 
    android:id="@+id/btnChange" 
    android:layout_width = "match_parent" 
    android:layout_height = "wrap_content" 
    android:text="Change text for button in fragment 1 to 'DONE'" /> 

<LinearLayout 
    android:id="@+id/lnFragment2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"></LinearLayout> 

MainActivity.java:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btnFragment1 = (Button) findViewById(R.id.btnFragment1); 

    btnFragment1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Fragment fragment = new Fragment1(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //lay fragmenttransaction thong qua fragment manager 
      fragmentTransaction.replace(R.id.lnFragment1,fragment); 
      fragmentTransaction.commit(); 
     } 
    }); 

} 

Fragment1.java:

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

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

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    Button btnFragment2 = (Button) getView().findViewById(R.id.btnFragment2); 

    btnFragment2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Fragment fragment = new Fragment2(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); //lay fragmenttransaction thong qua fragment manager 
      fragmentTransaction.replace(R.id.lnFragment2,fragment); 
      fragmentTransaction.commit(); 
     } 
    }); 
} 

Fragment2.java:

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

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

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    final Button btnChange = (Button) getView().findViewById(R.id.btnChange); 
    btnChange.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Fragment fragment1 = new Fragment1(); 
      View vFragment1 = fragment1.getView(); 
      Button btnChange = (Button) vFragment1.findViewById(R.id.btnChange); 
      btnChange.setText("Done"); 
     } 
    }); 
} 

谢谢!

+3

两个片段不应该直接相互通信,使用接口来传达片段1到活动,活动到片段2。 – HaroldSer

+0

您需要将一个片段与另一个片段进行通信您使用一个活动。 –

回答

0

制作契约接口并在片段中实现它们之间的通信,片段不能像这样直接进行通信。

0

另一种方式来实现,这是广播经理

Framgent -1

在你Framgent -1

在onCreateView
private MyBroadRequestReceiver receiver; 

IntentFilter filter = new IntentFilter(ACTION_NAME); 
receiver = new MyBroadRequestReceiver(); 
registerReceiver(receiver, filter); 

公共类MyBroadRequestReceiver扩展兄弟adcastReceiver {

@Override 
    public void onReceive(Context context, Intent intent) { 

    //update your Button text here 

    } 


} 

@Override 
    public void onDestroy() { 
     this.unregisterReceiver(receiver); 
     super.onDestroy(); 
    } 

片段-2

而且在任何你想更新第一块碎片按钮的文字

Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction(ACTION_NAME);  
     sendBroadcast(broadcastIntent); 

确保行动名字叫从片段-2 该广播这两个片段应该是相同的。

+0

只要与它一起工作,它可以为你工作,你也可以在调用sendBroadCast的同时传递一些数据,并在onReceive中执行动作并获得该意图。如果您发现它有用,请不要忘记标记为真,谢谢 – 9spl

0

不要承受太大的压力。有一个图书馆可以让你的工作更轻松。 EventBus。你也可以在这里找到很好的教程Fragment Refresh

相关问题