Android将数据从片段按钮传递到活动的textview

时间:2015-08-17 08:18:17

标签: android-fragments

我有两种布局。

第一个是带有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?

先谢谢你。我非常感谢你的帮助。

2 个答案:

答案 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