0

FragmentlongClickListenerを使用しようとしていますが、何らかの理由で正常に機能しません。私は長いクリックを行うと、イベントがonItemClickListenerAndroid:RecyclerViewアダプターlongClickListenerが動作しません

で受信される。これは私のコード

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 
    private ArrayList<Info> Infos; 
    private ClickListener clickListener; 
    private MyLongClickListener myLongClickListener; 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { 
     // each data item is just a string in this case 
     public ImageView image; 
     public/* Roboto */ TextView name; 
     public/* Roboto */ TextView companyName; 
     public/* Roboto */ TextView city; 
     public/* Roboto */ TextView time; 
     public/* Material */ TextView icon; 

     public ViewHolder(View convertView) { 
      super(convertView); 
      companyName = (TextView) convertView 
        .findViewById(R.id.t1); 
      city = (TextView) convertView 
        .findViewById(R.id.t2); 
      convertView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      clickListener.onItemClick(getPosition(), v); 
     } 

     @Override 
     public boolean onLongClick(View v) { 
      myLongClickListener.onItemLongClick(getPosition(), v); 
      return true; 
     } 
    } 

    public void add(int position, Info item) { 
     Infos.add(position, item); 
     notifyItemInserted(position); 
    } 


    // Provide a suitable constructor (depends on the kind of dataset) 
    public RecyclerViewAdapter(ArrayList<Info> dummyModelList) { 
     Infos = dummyModelList; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                  int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.genre_list_item, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     Info currInfo = Infos.get(position); 

     holder.city.setText(currInfo.getTitle()); 
     holder.companyName.setText(currInfo.getArtist()); 

    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return Infos.size(); 
    } 


    public void setOnItemClickListener(ClickListener clickListener) { 
     this.clickListener = clickListener; 
    } 

    public void setOnItemLongClickListener(MyLongClickListener clickListener) { 
     this.myLongClickListener = clickListener; 
    } 

    public interface ClickListener { 
     void onItemClick(int position, View v); 
    } 

    public interface MyLongClickListener { 
     boolean onItemLongClick(int position, View v); 
    } 
} 

ですこれは私が私のFragmentの内側にそれを使用する方法です。このonLongClickonItemClickListenerは、ともにonResumeの関数Fragmentに配置されています。

recyclerViewAdapter.setOnItemLongClickListener(new 
    RecyclerViewAdapter.MyLongClickListener() { 
     @Override 
     public boolean onItemLongClick(int position, View v) { 
      // Task 
      return true; 
     } 
}); 

私のコードで間違いはありませんが、なぜ動作していないのか分かりません。タッチイベントは常にonItemClickListenerで受信されます。どんな助けもありがとう、ありがとう!

答えて

5

あなたのコンストラクタ内にclickとonclicklistenersの両方を設定します。

 convertView.setOnClickListener(this); 
     convertView.setOnLongClickListener(this); 

setOnLongClickListenerを使わずに長いクリックを聞くことはできません。

+1

これは恥ずかしいです、どうすればこれを追加することができますか?それを指摘してくれてありがとう!あなたは私に多くの時間を救った。 – varunkr

+1

あなたの意見を聞いてうれしいです。あなたは経験から学ばなければなりません。そうでなければ、次回はもっと苦しくなります;) – uguboz

関連する問題