【问题标题】:Getting a View from a fragment class inside a FragmentActivity Class从 FragmentActivity 类中的片段类获取视图
【发布时间】:2013-10-04 07:57:32
【问题描述】:

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

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

我试过了:

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

但似乎不起作用。

那么有人知道吗?

【问题讨论】:

  • “我想从 fragmentActivity 类中的那个片段类中获取视图”为什么?你想将一些东西从片段传回活动吗?
  • 是的,因为我需要从片段类中获取数据,然后我想在验证数据后创建一个新选项卡。
  • 使用接口与活动通信。 developer.android.com/guide/components/fragments.html。检查主题与Activity通信

标签: android tabs android-view android-fragmentactivity


【解决方案1】:

如果您愿意,您可以使用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);

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

【讨论】:

    【解决方案2】:

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

     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());
            }
    
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多