Android

안드로이드(android) 프레그먼트(Fragment)에서 android:onClick을 핸들링하는 방법

프레그먼트(Fragment) android:onClick 이벤트 핸들링 방법

프레그먼트(Fragment)에서 Layout에서 android:onClick는 사용할 수 없다. 만약 사용하게 된다면, 아래와 같은 오류를 직면하게 된다.  액티비티(Activity)에서는 가능하지만 프레그먼트에서는 사용할 수 없다.

            <LinearLayout
                android:id="@+id/top_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onClick="onALayoutClicked"
                android:orientation="vertical">
               </LinearLayout>
 java.lang.IllegalStateException: Could not find method onALayoutClicked(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.LinearLayout with id 'top_layout'
        at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:6050)
        at android.view.View$DeclaredOnClickListener.onClick(View.java:6007)
        at android.view.View.performClick(View.java:7169)
        at android.view.View.performClickInternal(View.java:7139)
        at android.view.View.access$3900(View.java:808)
        at android.view.View$PerformClick.run(View.java:27481)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7615)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

프레그먼트에서는 OnClickListener를 상속 받아서 구현해야한다. onClick메소드를 오버라이드해줘야한다. 그리고 난 후 findViewById를 사용하여 레이아웃을 선언해주고 레이아웃에 setOnClickListener(this) 메소드를 초기화 주어야 한다.

public class SlideshowFragment extends Fragment implements View.OnClickListener {

     public View onCreateView(@NonNull LayoutInflater inflater,
     ViewGroup container, Bundle savedInstanceState) {
 
          View root = inflater.inflate(R.layout.fragment_slideshow, container, false);

     
          LinearLayout layout1 = root.findViewById(R.id.top_layout);
          layout1.setOnClickListener(this);
                .............................
	 }
     
     
    @Override
    public void onClick(View v) {
        switch(v.getId())
        {
            case R.id.top_layout:
            {
                if(isAvisiable) layout1.setVisibility(View.GONE);
                else layout1.setVisibility(View.VISIBLE);
                break;
            } 

        }
    }
}

액티비티에서도 OnClickListener를 상속받아 구현해서 동일하게 사용이 가능하다. 그에 비해 프레그먼트에서의 사용에서의 약간의 제약은 있는 듯 하다.

Leave a Reply

error: Content is protected !!