액티비티에 연결된 프래그먼트가 있고, 이 프래그먼트에 연결된 어댑터가 있고요,
어댑터에는 레이아웃인플래터로 연결된 레이아웃이 있습니다.
여기서 어댑터에 연결된 레이아웃에 있는 TextView를 온클릭 버튼으로 활용하고자 하는데
프래그먼트에서 저 TextView에 클릭이벤트 거는법이 잘 안되네요,
프래그먼트에서 따로 레이아웃인플래터로 걸고 온클릭리스너 걸어봐도
아예 인식을 못합니다, Log 걸어봐도 아무것도 안찍히네요
혹은 어댑터에서 클릭이벤트를 걸고 저 프래그먼트 안에 있는 함수를 실행해줄수 있으면 되는데
함수에 static을 걸수가 없어서 이런경우는 또 어떻게 불러와야 할지...
어댑터에서도 TextView요소를 잡아놓고 클릭이벤트가 있어서 프래그먼트에서 동시에 적용이 안되는걸까요?
부디 조언 부탁드립니다.
// 어댑터 소스
public class FriendsAdapter extends RecyclerView.Adapter<FriendsAdapter.MyViewHolder> {
//private Context mContext;
private Activity activity;
private ArrayList<Friend> mFriendList;
private FriendsAdapter.RecyclerItemClickListener listener;
private FriendsAdapter.RecyclerItemLongClickListener listener2;
private int selectedPosition;
public FriendsAdapter(FragmentActivity activity, ArrayList<Friend> mFriendList, RecyclerItemClickListener recyclerItemClickListener, RecyclerItemLongClickListener recyclerItemLongClickListener) {
this.activity = activity;
this.mFriendList = mFriendList;
this.listener = recyclerItemClickListener;
this.listener2 = recyclerItemLongClickListener;
}
@Override
public FriendsAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.friends_row, parent, false);
return new FriendsAdapter.MyViewHolder(v);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private TextView red, grey; //롱클릭에 대한 콘텍스트 메뉴
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MyViewHolder(View itemView) {
super(itemView);
red = (TextView)itemView.findViewById(R.id.red);
grey = (TextView)itemView.findViewById(R.id.grey);
}
public void bind(final Friend friends, final FriendsAdapter.RecyclerItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onClickListener(friends, getLayoutPosition());
}
});
}
public void bind2(final Friend friends, final FriendsAdapter.RecyclerItemLongClickListener listener2) {
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 롱클릭시 red와 grey 텍스트뷰 나타나게 하기
red.setVisibility(View.VISIBLE);
grey.setVisibility(View.VISIBLE);
red.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//여기는 클릭이 잡힙니다
}
});
return true; //롱클릭 후 클릭이벤트 중복방지 위한 true
}
});
}
}
public interface RecyclerItemClickListener {//RecyclerItemClickListener 1
void onClickListener(Friend friends, int position);
}
public interface RecyclerItemLongClickListener {
void onLongClickListener(Friend friends, int position);
}
public void setSelectedPosition(int currentIndex) {//setSelectedPosition 2
this.selectedPosition = currentIndex;
}
public int getSelectedPosition() {//setSelectedPosition 6 다시changeSelectedPlace로
return selectedPosition;
}
}
// 프래그먼트 소스
public class FriendFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
private RecyclerView recycler;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.friend, container, false);
// Setting object
recycler = (RecyclerView) view.findViewById(R.id.recyclerview_fr);
// List initialize
dividerItemDecoration = new DividerItemDecoration(recycler.getContext(), new LinearLayoutManager(getActivity()).getOrientation());
dividerItemDecoration.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.lin_gray));
recycler.addItemDecoration(dividerItemDecoration);
mFriendList = new ArrayList<>();
recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mAdapter = new FriendsAdapter(getActivity(), mFriendList, new FriendsAdapter.RecyclerItemClickListener() {
@Override
public void onClickListener(Friend friends, int position) {
// 리스트 영역 클릭시 이벤트 실행
Intent intentfr = new Intent(getContext(), FriendProfile.class);
intentfr.putExtra("id", friends.getFr_id());
startActivity(intentfr);
}
}, new FriendsAdapter.RecyclerItemLongClickListener() {
@Override
public void onLongClickListener(final Friend friend, final int position) {
final boolean pushCurrentlyEnabled = friend.isTouch();
String[] choose;
//롱클릭시 어댑터와 연결된 레이아웃 인플래터로 불러와서
choose = new String[]{getString(R.string.mygpsblock), getString(R.string.frienddel)};
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
View dialogView = layoutInflater.inflate(R.layout.friends_row, null);
//red와 grey 잡아주고
final TextView red = (TextView)dialogView.findViewById(R.id.red);
final TextView grey = (TextView)dialogView.findViewById(R.id.grey);
//클릭이벤트 연결
grey.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//여기 클릭이벤트로 들어오질 못합니다
red.setVisibility(View.GONE);
grey.setVisibility(View.GONE);
}
});
red.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//여기 클릭이벤트로 들어오질 못합니다
}
});
}
});
recycler.setAdapter(mAdapter);
return view;
}
@Override
public void onRefresh() {
}
@Override
public void onDestroy() {
super.onDestroy();
}
}