如何同时使用 AppCompatActivity 和 RecyclerView?
How to use AppCompatActivity and RecyclerView and the same time?
所以我有一个使用 RecyclerView 的应用程序,但是当我单击回收器包含的图像时,我希望它打开一个 DialogFragment。我的问题是当我点击图片时,我需要使用
getSupportFragmentManager()
但它不允许我这样做,因为我需要将我的 class 扩展到 AppCompatActivity 但我已经将它扩展到 RecyclerView.Adapter<RecyclerViewAdapterPerfil.ViewHolder>
。
我能做些什么?我已经尝试创建一个不同的 class 并使其扩展 AppCompatActivity 但它不起作用并给了我这个错误:
java.lang.IllegalStateException: Activity 已被摧毁。
这是给我错误的 class。
package com.example.registarmysql;
public class RecyclerViewAdapterPerfil extends RecyclerView.Adapter<RecyclerViewAdapterPerfil.ViewHolder> {
private static final String TAG = "RecyclerViewAdapter";
private String aFotografiaUtilizador;
private String aNomeUtilizador;
private String aEmailUtilizador;
private String aPasswordUtilizador;
private Context aContext;
public RecyclerViewAdapterPerfil(String fotografiaUtilizador, String nomeUtilizador, String emailUtilizador, String passwordUtilizador, Context context) {
this.aFotografiaUtilizador = nomeUtilizador;
this.aNomeUtilizador = fotografiaUtilizador;
this.aEmailUtilizador = emailUtilizador;
this.aPasswordUtilizador = passwordUtilizador;
this.aContext = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called");
Glide.with(aContext).asBitmap().load(aNomeUtilizador).dontTransform().into(holder.fotografiaUtilizador);
holder.nomeUtilizador.setText(aFotografiaUtilizador);
holder.emailUtizador.setText(aEmailUtilizador);
holder.passwordUtilizador.setText(aPasswordUtilizador);
holder.fotografiaUtilizador.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
abrirCaixa();
Log.d(TAG, "onClick: clicked on: " + aFotografiaUtilizador);
Toast.makeText(aContext, "Carregou na foto", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return 1;
}
public class ViewHolder extends RecyclerView.ViewHolder {
CircleImageView fotografiaUtilizador;
TextView nomeUtilizador;
TextView emailUtizador;
TextView passwordUtilizador;
RelativeLayout parentLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fotografiaUtilizador = itemView.findViewById(R.id.fotografia_perfil);
nomeUtilizador = itemView.findViewById(R.id.nome_utilizador);
emailUtizador = itemView.findViewById(R.id.email_utilizador);
passwordUtilizador = itemView.findViewById(R.id.password_utilizador);
parentLayout = itemView.findViewById(R.id.parent_layout);
}
}
static class novaClasse extends AppCompatActivity{
public void abrirCaixaNova(){
CaixaEditarFotografiaPerfil caixa = new CaixaEditarFotografiaPerfil();
caixa.show(getSupportFragmentManager(), "Exemplo de caixa");
}
}
private void abrirCaixa() {
new novaClasse().abrirCaixaNova();
}
}
错误在
public void abrirCaixaNova(){
CaixaEditarFotografiaPerfil caixa = new CaixaEditarFotografiaPerfil();
caixa.show(getSupportFragmentManager(), "Exemplo de caixa");
}
将 FragmentManager 传递给 RecyclerViewAdapterPerfil 的构造函数有效。
所以我有一个使用 RecyclerView 的应用程序,但是当我单击回收器包含的图像时,我希望它打开一个 DialogFragment。我的问题是当我点击图片时,我需要使用
getSupportFragmentManager()
但它不允许我这样做,因为我需要将我的 class 扩展到 AppCompatActivity 但我已经将它扩展到 RecyclerView.Adapter<RecyclerViewAdapterPerfil.ViewHolder>
。
我能做些什么?我已经尝试创建一个不同的 class 并使其扩展 AppCompatActivity 但它不起作用并给了我这个错误:
java.lang.IllegalStateException: Activity 已被摧毁。
这是给我错误的 class。
package com.example.registarmysql;
public class RecyclerViewAdapterPerfil extends RecyclerView.Adapter<RecyclerViewAdapterPerfil.ViewHolder> {
private static final String TAG = "RecyclerViewAdapter";
private String aFotografiaUtilizador;
private String aNomeUtilizador;
private String aEmailUtilizador;
private String aPasswordUtilizador;
private Context aContext;
public RecyclerViewAdapterPerfil(String fotografiaUtilizador, String nomeUtilizador, String emailUtilizador, String passwordUtilizador, Context context) {
this.aFotografiaUtilizador = nomeUtilizador;
this.aNomeUtilizador = fotografiaUtilizador;
this.aEmailUtilizador = emailUtilizador;
this.aPasswordUtilizador = passwordUtilizador;
this.aContext = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called");
Glide.with(aContext).asBitmap().load(aNomeUtilizador).dontTransform().into(holder.fotografiaUtilizador);
holder.nomeUtilizador.setText(aFotografiaUtilizador);
holder.emailUtizador.setText(aEmailUtilizador);
holder.passwordUtilizador.setText(aPasswordUtilizador);
holder.fotografiaUtilizador.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
abrirCaixa();
Log.d(TAG, "onClick: clicked on: " + aFotografiaUtilizador);
Toast.makeText(aContext, "Carregou na foto", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return 1;
}
public class ViewHolder extends RecyclerView.ViewHolder {
CircleImageView fotografiaUtilizador;
TextView nomeUtilizador;
TextView emailUtizador;
TextView passwordUtilizador;
RelativeLayout parentLayout;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fotografiaUtilizador = itemView.findViewById(R.id.fotografia_perfil);
nomeUtilizador = itemView.findViewById(R.id.nome_utilizador);
emailUtizador = itemView.findViewById(R.id.email_utilizador);
passwordUtilizador = itemView.findViewById(R.id.password_utilizador);
parentLayout = itemView.findViewById(R.id.parent_layout);
}
}
static class novaClasse extends AppCompatActivity{
public void abrirCaixaNova(){
CaixaEditarFotografiaPerfil caixa = new CaixaEditarFotografiaPerfil();
caixa.show(getSupportFragmentManager(), "Exemplo de caixa");
}
}
private void abrirCaixa() {
new novaClasse().abrirCaixaNova();
}
}
错误在
public void abrirCaixaNova(){
CaixaEditarFotografiaPerfil caixa = new CaixaEditarFotografiaPerfil();
caixa.show(getSupportFragmentManager(), "Exemplo de caixa");
}
将 FragmentManager 传递给 RecyclerViewAdapterPerfil 的构造函数有效。