免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
記事のディレクトリ
序文
効果:
、LayoutInflater.from()コンテキストの問題
コアの問題は、[PopupWindowコンテキストが書く方法を知らないということですか?]
中のonClick()View popview = LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout, null, false);
から()のパラメータ
に()とonCreateViewHolder コンテキストが同じコンテキストです。View view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);
あなたは書くことができparent.getContext()
ますが、mcontextクラスのメンバ変数を書くことができ、。
1著:mcontext
ItemAdapter.java:RecyclerViewカスタム・アダプタ
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {
private List<Item> mitemList;
private Context mcontext;
static class ViewHolder extends RecyclerView.ViewHolder{...}
public ItemAdapter(Context context,List<Item> itemList)
{
this.mitemList=itemList;
this.mcontext=context;
}
@Override
public int getItemCount() {...}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);
final ViewHolder viewHolder=new ViewHolder(view);
final View popview=LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout,null,false);
....
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {...}
}
2執筆:parent.getContext()
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_item,parent,false);
final ViewHolder viewHolder=new ViewHolder(view);
final View popview=LayoutInflater.from(parent.getContext()).inflate(R.layout.popupwindow_layout,null,false);
final PopupWindow popupWindow=new PopupWindow(
popview,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
true
);
viewHolder.itemBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
popupWindow.showAtLocation(popview,Gravity.CENTER,0,0);
}
});
popview.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
popupWindow.dismiss();
}
});
return viewHolder;
}
第二に、テキストの問題を設定します
:効果
こののは、あなたが別の表示ポップアップウィンドウ中国人を設定したい項目をクリックし異なるに基づいて行われます。
[コア問題:R.idののTextViewを見つけることができません]は
、他のコントロールのために、なぜそれR.idの表示オプションを知らないが、私たちが望むR.id.contentのTextViewが表示されません。あなただけが仕事を抜け出します。
[コアの問題:のsetText()メソッドはありません]
一緒に書いていない、仕事のために別々に書きます。
問題:
解決策:
TextView textView=popview.findViewById(R.id.content);
textView.setText("hello");
完全なソースコード
> ItemAdapter.java
```java
package com.example.myapplication;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {
private List<Item> mitemList;
private Context mcontext;
static class ViewHolder extends RecyclerView.ViewHolder
{
TextView itemName;
TextView itemProgress;
Button itemBtn;
public ViewHolder(View view)
{
super(view);
itemName=view.findViewById(R.id.name);
itemProgress=view.findViewById(R.id.progress);
itemBtn=view.findViewById(R.id.show);
}
}
public ItemAdapter(Context context,List<Item> itemList)
{
this.mitemList=itemList;
this.mcontext=context;
}
@Override
public int getItemCount() {
return mitemList.size();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mcontext).inflate(R.layout.listview_item,parent,false);
final ViewHolder viewHolder=new ViewHolder(view);
final View popview=LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout,null,false);
final PopupWindow popupWindow=new PopupWindow(
popview,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
true
);
viewHolder.itemBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos=viewHolder.getAdapterPosition();
TextView textView=popview.findViewById(R.id.content);
switch (pos)
{
case 0:
{
textView.setText("hello");
break;
}
case 1:
{
textView.setText("world");
break;
}
default:
break;
}
popupWindow.showAtLocation(popview,Gravity.CENTER,0,0);
}
});
popview.findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
popupWindow.dismiss();
}
});
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Item item=mitemList.get(position);
holder.itemName.setText(item.getName());
holder.itemProgress.setText(item.getProgress());
}
}