0

ボタンのonClickListenerを膨らませたレイアウトから操作しようとしました。私はこれをしようとしていたが、何も起こりません:ビューのボタンonClickListenerがRecyclerViewアダプタ内で応答しない

LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.my_profile_fragment, null); 
Button svBtn = (Button) view.findViewById(R.id.saveBtn); 

svBtn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     System.out.println("CLICKED"); 
    } 
}); 

RecyclerViewアダプターの内部で、私はカードのレイアウトを持つonCreateViewHolderで元のレイアウトを膨らませる、と私はそれと相互作用することができる午前:

@Override 
public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.single_card, null); 

    return new ItemRowHolder(v); 
} 

しかし、私は別のレイアウト(フラグメントレイアウト)からボタンと対話したいと思います。それは可能ですか?どうすればそれを達成できますか?

+0

異なるレイアウトのボタンクリックと対話することは可能ですか? – branHazz

+0

ビュー(RecyclerView)の外にクリックを登録できないようです。 'my_profile_fragment'の膨張されたレイアウトはnullpointerを生成しないので、(my_profile_fragment'レイアウトにある)クリックも処理したいボタンを見つけることができます。 – branHazz

答えて

0

view.getParent()を試して、フラグメントの親ビューを取得してください。

+0

view.getParent()。findViewById - 不可能です。それを(View)にキャストした場合、nullpointerを取得しますView a =(View)view.getParent(); a.findViewById(R.id ...... – branHazz

0

あなたのやり方は残念ながらうまくいかないでしょう。

onBindViewHolder(ViewHolder viewholder, int position)メソッドに移動し、viewholderのフィールドを使用してクリックリスナーを直接設定します。

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) { 
    viewHolder.svBtn.setOnClickListener(this); 
} 
+0

svBtnは、このRecyclerViewとは関係のない別のレイアウトです。すべてのRecyclerViewメソッドで異なるレイアウトを展開し、そこにonClickListenerを設定しようとしましたが、それでも動作しません。 – branHazz

関連する問題