2016-12-18 3 views
0

데이터 목록을 표시하는 RecyclerView이 있습니다. 내가하고 싶은 일은 사용자가 해당 항목을 탭하면 해당 사용자의 연결을 해제할지 묻는 것입니다. 응용 프로그램의 여러 지점에서이 작업을 수행했으며이 코드는 완전히 작동하는 RecyclerViewOnItemTouchListener의 코드를 기반으로 작성되었습니다. 그러나 어떤 이유에서 이것은 모든 클릭을 등록하는 것을 거부합니다. 데이터가 RecyclerView으로 채워지므로 클릭 만 허용하지 않습니다. 나는 명백한 것을 놓쳤는가?Android RecyclerView OnItemTouchListener가 작동하지 않습니다.

public void configurePage() { 
    Log.d(TAG, "test = " + listOfIDs.size()); 
    mLayoutManager = new LinearLayoutManager(AgentViewUsers.this); 
    mAdapter = new AgentUserViewAdapter(listOfItems); 
    mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecyclerView, new RecyclerItemClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      AlertDialog.Builder build = new AlertDialog.Builder(AgentViewUsers.this); 
      build.setTitle("Unlink this user?"); 
      build.setMessage("Are you sure you wish to unlink this user?"); 
      build.setNegativeButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        // database code that deletes that user from firebase. 
       } 
      }); 
      build.setPositiveButton("No", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        dialogInterface.dismiss(); 
       } 
      }); 
     } 

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

     } 
    })); 
    mRecyclerView.addItemDecoration(new DividerItemDecoration(AgentViewUsers.this,DividerItemDecoration.VERTICAL_LIST)); 
    mRecyclerView.setLayoutManager(mLayoutManager); 
    mRecyclerView.setAdapter(mAdapter); 
    spinner.setVisibility(View.GONE); 
    // for loop that populates listOfItems from an already populated listOfIDs; 
} 
+0

왜 뷰 홀더 어댑터에 onclick을 넣으려고하지 않습니까? –

+0

필자는 Firebase과 상호 작용하기 위해 OnClick이 필요하고이 활동에만 존재하는 많은 내용을 사용하기 때문에 필자는이 경우에는 할 수 없다는 것을 알고 있습니다. 이것은 내가 응용 프로그램의 다른 여러 위치에서이 작업을 수행 한 방법이며, 여기를 제외하고는 어디에서나 사용할 수 있습니다. – markeh21

+1

그냥 임의의 의견, 당신은 그 AlertDialog에 show()를 호출 할 수 있습니다. 또한 어쩌면 당신은 목록 항목에 대한 사용자 정의 레이아웃을 사용하고 그 레이아웃은 다른 상태에 대해 다른 drawable을 가지고 있지 않습니다. (예 : 누르기, 놓기) –

답변

1

음, AlertDialog에서 show()를 호출 할 수 있습니다. 또한 목록 항목에 맞춤 레이아웃을 사용하고 있으며 레이아웃에 다른 상태 (즉, 눌렀다는 것)에 다른 드로어 블이 없습니다.

관련 문제