我有两种布局。
第一个是带有TextView和片段的LinearLayout
<RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:id="@+id/textView"
android:textSize="30dp"
android:layout_gravity="center_horizontal" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"/>
</RelativeLayout>
类MainActivity,使用 ViewPager 来滑动两个片段布局
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return SimpleKeypad.newInstance("SimpleKeypad, Instance 1");
case 1: return AdvanceKeypad.newInstance("AdvanceKeypad, Instance 1");
default: return AdvanceKeypad.newInstance("AdvanceKeypad, Default");
}
}
@Override
public int getCount() {
return 5;
}
}
}
片段布局有一个按钮
<Button
android:id="@+id/button"
/>
我的问题是如何在单击片段布局中的Button时将文本设置为MainActivity布局中的Textview?
先谢谢你。我非常感谢你的帮助。
答案 0 :(得分:2)
最简单的方法是直接从片段中访问TextView。如果找不到视图,这将因NullPointerException而崩溃。
((TextView) getActivity().findViewById(R.id.textView)).setText("Goodbye");
您还可以在MainActivity中实现一个提供更好抽象的方法。例如:
public void setTitle(final String title) {
((TextView) findViewById(R.id.textView)).setText(title);
}
然后从你的片段中调用
((MainActivity) getActivity()).setTitle("Goodbye");
答案 1 :(得分:0)
在Fragment类中编写一个接口 还实现onClickListener来处理Fragment类中的按钮单击事件,如下所示
public class MyFragment extends Fragment implements OnClickListener{
private Callback callback;
...
...
onClick(View v) {
callback.setTextToView("Message to be set");
}
public void setCallback(Callback callback) {
this.callback = callback;
}
public interface Callback {
void setTextToView(String messageToShow);
}
}
然后在您的活动中实现该界面,如下所示
public class MyActivity extends Activity implements Callback {
...
...
onCreate(...) {
myFragment = new MyFragment();
// add your fragment to activity
myFragment.setCallback(this);
}
@Override
public void setTextToView(String messageToShow) {
myTextview.setText(messageToShow);
}
}
在setTextToView()中,您可以将值设置为在Activity
中声明的textview