2017-11-26 28 views
0

나는 두 가지를 동시에 구현할 때 ViewHolder가 그 중 하나에 접근 할 수 없다. 가능한가? 내 코드 :단일 뷰 소유자에서 onClickListener 및 onLongClickListener를 구현하는 방법은 무엇입니까?

public final class SomeViewHolder extends RecyclerView.ViewHolder 
    implements View.OnClickListener, View.OnLongClickListener { 

    public final AestheticTextView mName; 
    public final AestheticTextView mNumber; 

    public SomeViewHolder(View itemView) { 
     super(itemView); 
     mName = (AestheticTextView) itemView.findViewById(android.R.id.title); 
     mNumber = (AestheticTextView) itemView.findViewById(android.R.id.summary); 

     itemView.setOnClickListener(this); 
     itemView.setOnLongClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     // doesn't run 
    } 

    @Override 
    public boolean onLongClick(View view) { 
     // doesn't run 
    } 
} 

아래와 같이 청취자 중 하나를 제거하면 정상적으로 작동합니다.

public final class SomeViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public final AestheticTextView mName; 
    public final AestheticTextView mNumber; 

    public SomeViewHolder(View itemView) { 
     super(itemView); 
     mName = (AestheticTextView) itemView.findViewById(android.R.id.title); 
     mNumber = (AestheticTextView) itemView.findViewById(android.R.id.summary); 

     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     // run properly 
    } 
} 
+0

죄송 선언, 당신의 요점을 파악하지 못했지만, 나는를 반환 부울, 이후 그것을 구현하려면 필요합니다. –

+0

사실이나 거짓을 반환합니까? – diegoveloper

+0

사실 # 최소 길이를 완료하기위한 단어 # –

답변

-1

바인딩 메소드 또는 원하는대로 호출하십시오.

public void bind(ModelClass model, MyInterface listener) { 

itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
//Create your own interface and add arguments based on your needs 
        listener.itemClicked(view); 
       } 
      }); 

itemView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
    //Create your own interface and add arguments based on your needs 
         listener.itemLongClicked(view); 
        } 
       }); 
} 
당신의 onBindViewHolder()

holder.bind(item.get(position), listener); 

그리고 당신의 Adapter

adapter = new MyAdapter(item, new OnItemClick() { 
     @Override 
     public void itemClicked(View view, ModelClass model) { 
      //event 
     } 
     @Override 
     public void itemLongClicked(View view, ModelClass model) { 
      return true; 
     } 
    }); 
+0

그러나 이것은 실제로 수행 할 수있는 두 수신기를 직접 구현하는 것과 같지만 나쁜 습관으로 간주됩니다. –