【问题标题】:How to access the fragment's button in an activity如何在活动中访问片段的按钮
【发布时间】:2015-01-09 12:22:54
【问题描述】:

我正在创建两个java文件第一个主要activity.java文件第二个fragment.java文件在fragment.java上创建按钮如何单击activity.java上写的监听器帮助我

片段.java

public class fragment extends fragment{
Button btn;
// some code
btn = (Button)layout.findviewbyid(R.id.btn1);

}

}

活动.java

public class activity extends Activity
{


 // how to access the click action btn here
 btn.setOnclicklistner(new View.OnClickLisitner(){
 public OnClick(){


 }

【问题讨论】:

  • 您好,请详细说明这个问题。那么只有我们能够回答。
  • 你想达到什么目的?
  • 我创建按钮变量片段类如何点击动作代码写活动类
  • 可能与否......

标签: java android android-activity


【解决方案1】:

要在片段的活动中使用按钮,您必须使用getActivity()

在您的片段中,

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

        btn = (Button) getActivity().findViewById(R.id.btn);
}

btn 是活动中的按钮

getActivity() 在 Fragment 中返回 Fragment 当前关联的 Activity。 (见http://developer.android.com/reference/android/app/Fragment.html#getActivity())。

【讨论】:

    【解决方案2】:

    您可以定义自定义clickListener 类并在fragment 中创建它的instance 并在那里设置监听器实例。现在您可以在该类中编写代码。希望对你有帮助。

    public class MyCustomListener implements OnClickListener{
    
         @override
         public void onClick(View v){
    
         // you stuff
         }  
    }
    

    然后在你的片段中调用这个

    MyCustomListener listener=new MyCustomListener();
    btn.setOnClickListener(listener);
    

    【讨论】:

    • 我创建按钮变量片段类如何点击动作代码写活动类....
    【解决方案3】:

    如果我正确理解您的问题,您希望将片段内的按钮单击委托给其父活动。

    在片段中保留对父活动的引用。然后将侦听器设置为片段中的按钮,如下所示:

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            parentActivity.doStuff();
        }
    };
    

    在你的父Activity中,定义方法doStuff():

    public void doStuff() {
        // handle button click event here
    }
    

    【讨论】:

    • 对于那些也难以获得对父活动的引用的人,您需要转换getActivity的结果。示例:如果您的活动称为 ExampleActivity,您可以这样做:ExampleActivity activityVariable = (ExampleActivity) getActivity();
    • 这就是我的解决方案!
    【解决方案4】:

    这是我对这个问题的看法,包括 Java 和 Kotlin。

    Java:

    public final class YourActivity extends AppCompatActivity {
    
       /***/
    
       public final void yourMethod() {
          printIn("Printing from yourMethod!")
       }
    }
    
    public final class YourFragment extends Fragment {
    
       /***/
        
        @Override
        public void onViewCreated(View v, Bundle savedInstanceState) {
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    YourActivity yourActivity = (YourActivity) getActivity();
                    yourActivity.yourMethod();
                }
            }));
        }
    }
    
    

    科特林:

    class YourActivity : AppCompatActivity() {
    
        /***/
    
        fun yourMethod() {
            print("Printing from yourMethod!")
        }
    }
    
    class YourFragment: Fragment() {
    
        /***/
    
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            button.setOnClickListener {
                val yourActivity = activity as YourActivity
                yourActivity.yourMethod()
            }
        }
    }
    

    我希望它可以帮助那里的人=)

    【讨论】:

    • 附言。我几乎完全使用 Kotlin,所以您可以随意打磨 Java(或 Kotlin)
    • PPS。感谢@Gerke 为我指明了正确的方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多