从FragmentActivity类中的片段类获取视图

时间:2013-10-04 07:57:32

标签: android tabs android-view android-fragmentactivity

我有fragmentActivity类,它实现OnTabChangeListener并充当其他片段类的宿主。每个片段类都在不同的XML布局文件中定义,用于自己的布局。

我想从fragmentActivity类中的那个片段类中获取View。

我试过了:

View view = myFragment.getView();
Button myButton = (Button) view.findViewById(R.id.my_button);
myButton.setOnClickListener(new MyClickListener());

但似乎没有用。

所有人都知道吗?

2 个答案:

答案 0 :(得分:2)

如果您愿意,可以使用BroadcastReciver从您的片段向您的活动发送事件通知。

要在FragmentActivity注册广播接收器,请执行以下操作:

public class MyActivity extends FragmentActivity {

    private BroadcastReceiver myBroadcastReceiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(...) {
                //YOU WILL RECEIVE YOUR BROADCAST HERE. WRITE YOUR CODE HERE TO ADD NEW TAB
            }
       });

    ...

    public void onResume() {
        super.onResume();
        ....
        registerReceiver(myBroadcastReceiver, intentFilter);
    }

    public void onPause() {
        super.onPause();
        ...
        unregisterReceiver(myBroadcastReceiver);
    }
    ...
}

现在从你的片段发送广播就像这样:

Intent intent=new Intent();
intent.setAction("ANY_UNIQUE_NAME");
intent.putExtra("data",EXTRA_DATA_IF_YOU_WANT);
sendBroadcast(intent);

您将在接收活动的活动中收到此广播。做你想做的任何事。

答案 1 :(得分:-1)

如果你想访问你的组件并设置一些数据,我建议你在片段中创建一个方法,如下所示:

 import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;

    public class DetailFragment extends Fragment {

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


        public void setSettings(){
            Button button = (Button) getView().findViewById(R.id.my_button);
            button.setOnClickListener(new MyClickListener());
        }

    }