'2018/08/20'에 해당되는 글 1건

728x90

초급 단계를 벗어나고자 Interface 에 대해 공부하고 있는데 생각만큼 이해가 잘 안된다.



https://guides.codepath.com/android/Creating-Custom-Listeners 를 보고 테스트 해본 걸 적어둔다.


import android.view.View;

class MyCustomObject {
    // Step 1 - 인터페이스 정의
    public interface MyCustomObjectListener {
        // These methods are the different events and
        // need to pass relevant arguments related to the event triggered
        public void onObjectReady(String title);
        // or when data has been loaded
        void onItemClick(View view, int position);
    }

    // Step 2 - This variable represents the listener passed in by the owning object
    // The listener must implement the events interface and passes messages up to the parent.
    private MyCustomObjectListener listener;

    // Constructor where listener events are ignored
    public MyCustomObject() {
        // set null or default listener or accept as argument to constructor
        this.listener = null;
    }

    // Step 3 - Assign the listener implementing events interface that will receive the events
    public void setCustomObjectListner(MyCustomObjectListener listner){
        this.listener = listner;
    }
}


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MyParentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create the custom object
        MyCustomObject childObject = new MyCustomObject();

        // Step 4 - Setup the listener for this object
        childObject.setCustomObjectListner(new MyCustomObject.MyCustomObjectListener() {
            @Override
            public void onObjectReady(String title) {

            }

            @Override
            public void onItemClick(View view, int position) {

            }

        });
    }
}




Recyclerview 에서 Apdater를 만들어서 Interface 를 통해 데이터를 주고 받은 걸 해보고 싶은데 이해를 못한 부분이 있는지 예제를 보고 따라해보고 막상 적용해보려고 하면 막힌다.


public void setOnItemClickListener(OnItemClickListener listener){
   this.listener = listener;
}

를 통해서 데이터를 주고 받은 걸 해보고 싶은데 전혀 동작이 안된다.


생성자에 값을 넘겨서 처리하면 동작되는데 분리해서 접근하면 안되네.

뭔가 가능한 방법이 있을 거 같은데 실력이 미천해서 완벽한 해결을 못하고 Inner Class 로 처리를 하고 있다.

아래와 같이 생성자를 통해서 값을 넘기면 원하는 결과를 얻을 수는 있다.


public class StaffListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>  {
    public interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public OnItemClickListener listener;

    public StaffListAdapter(Context mContext, ArrayList<Group_Item> items, OnItemClickListener listener) {
        this.mContext = mContext;
        IvList = items;
        this.listener = listener;
    }

}

public class StaffList extends AppCompatActivity {
    Context context;
    private ArrayList<Group_Item> staffItemList = new ArrayList<>();
    RecyclerView.Adapter staffListAdapter;

    staffListAdapter = new StaffListAdapter(this, staffItemList, new StaffListAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
            if(staffItemList.get(position).getIsFolder().equals("1")){
            } else if(staffItemList.get(position).getIsFolder().equals("0")){
            }
        }
    });
    listView.setAdapter(staffListAdapter); // 어댑터를 리스트뷰에 세팅
}

블로그 이미지

Link2Me

,