错误:非静态方法show()无法从片段崩溃中的静态上下文中引用
该项目的源代码在
非静态方法下显示(fragmentManager,string),无法从静态上下文中引用 下面给出了我的管理和adminComplaintDetailsfragment类。
adminhomeFragment.java
package com.example.ecomplaint;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class AdminHomeFragment extends Fragment {
ListView listview;
public static ArrayList arrayList;
FirebaseDatabase rootNode;
DatabaseReference reference;
public static CustomRow adapter;
public static ArrayList adapterData;
FloatingActionButton mainbutton,registerbutton,logoutbutton;
Animation fabOpen,fabClose,rotateForward,rotateBackward;
boolean isOpen=false;
DatabaseReference referenceExpert;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_admin_home,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final ProgressBar simpleProgressBar = (ProgressBar) view.findViewById(R.id.progressBar);
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
mainbutton=(FloatingActionButton) view.findViewById(R.id.floatingActionButton);
registerbutton=(FloatingActionButton) view.findViewById(R.id.registerbutton);
logoutbutton=(FloatingActionButton) view.findViewById(R.id.logout_button);
fabOpen= AnimationUtils.loadAnimation(getContext(),R.anim.from_buttom_anim);
fabClose= AnimationUtils.loadAnimation(getContext(),R.anim.to_buttom_anim);
rotateForward= AnimationUtils.loadAnimation(getContext(),R.anim.rotate_open_anim);
rotateBackward= AnimationUtils.loadAnimation(getContext(),R.anim.rotate_close_anim);
mainbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
animatefab();
}
});
registerbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(getContext(),RegistrationActivity.class);
startActivity(i);
}
});
logoutbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(getContext(),MainActivity.class));
}
});
listview=view.findViewById(R.id.list);
listview.setItemsCanFocus(false);
arrayList = new ArrayList<Complaint>();
adapterData = new ArrayList<Complaint>();
adapter = new CustomRow(getContext(), arrayList);
listview.setAdapter(adapter);
simpleProgressBar.setVisibility(View.VISIBLE);
//arrayList.add(new Complaint("123","this is title","akhil","19bce1564","ragging","rahul","registered"));
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(!arrayList.isEmpty()){
arrayList.clear();
}
for(DataSnapshot dataSnapshot:snapshot.getChildren()){
Complaint complaint=dataSnapshot.getValue(Complaint.class);
// if(complaint.getComplaintFrom().getEmail().equals(FirebaseAuth.getInstance().getCurrentUser().getEmail())){
//get all users complaint
arrayList.add(complaint);
// }
adapter.notifyDataSetChanged();
listview.requestLayout();
simpleProgressBar.setVisibility(View.INVISIBLE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Complaint present = (Complaint) arrayList.get(position);
AdminComplaintDetailsFragment admincomplaintDetailsFragment= new AdminComplaintDetailsFragment(present);
AdminComplaintDetailsFragment.show(((FragmentActivity)getContext()).getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());
//Toast.makeText(getContext(), "hii", Toast.LENGTH_SHORT).show();
}
});
}
private void animatefab(){
if (isOpen){
mainbutton.startAnimation(rotateForward);
registerbutton.startAnimation(fabClose);
logoutbutton.startAnimation(fabClose);
registerbutton.setClickable(false);
logoutbutton.setClickable(false);
isOpen=false;
}
else{
mainbutton.startAnimation(rotateBackward);
registerbutton.startAnimation(fabOpen);
logoutbutton.startAnimation(fabOpen);
registerbutton.setClickable(true);
logoutbutton.setClickable(true);
isOpen=true;
}
}
}
admincomplaintdetailsfragment.java
package com.example.ecomplaint;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import java.util.Locale;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ComplaintDetailsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class AdminComplaintDetailsFragment extends BottomSheetDialogFragment {
FirebaseDatabase rootNode;
DatabaseReference reference;
String[] items = {"Under investigation","Reviewing complaint","Investigation complete","Case Closed"};
AutoCompleteTextView autoCompleteTxt;
ArrayAdapter<String> adapterItems;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
Complaint present;
public AdminComplaintDetailsFragment() {
// Required empty public constructor
}
public AdminComplaintDetailsFragment(Complaint present){
this.present=present;
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment ComplaintDetailsFragment.
*/
// TODO: Rename and change types and number of parameters
public static AdminComplaintDetailsFragment newInstance(String param1, String param2) {
AdminComplaintDetailsFragment fragment = new AdminComplaintDetailsFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_complaint_details, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(present.getStatus().equals("registered")){
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
present.setStatus("Seen");
HashMap hashMap=new HashMap();
hashMap.put("status","Seen");
reference.child(present.complaintID).updateChildren(hashMap);
Log.i("this",reference.child("complaintID").child(present.complaintID).child("status").toString());
}
TextView title=view.findViewById(R.id.details_title);
title.setText(present.getTitle());
TextView name=view.findViewById(R.id.details_name);
name.setText(present.getName());
TextView regno=view.findViewById(R.id.details_regno);
regno.setText(present.getRegno());
TextView incident=view.findViewById(R.id.details_info);
incident.setText(present.getIncident_info());
TextView ComplaintFrom=view.findViewById(R.id.complaintFrom);
ComplaintFrom.setText(present.getComplaintFrom().getName());
TextView status=view.findViewById(R.id.details_status);
status.setText(present.getStatus().toUpperCase(Locale.ROOT));
autoCompleteTxt = view.findViewById(R.id.auto_complete_txt);
adapterItems = new ArrayAdapter<String>(getContext(),R.layout.list_item,items);
autoCompleteTxt.setAdapter(adapterItems);
autoCompleteTxt.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
present.setStatus(item);
HashMap hashMap=new HashMap();
hashMap.put("status",item);
reference.child(present.complaintID).updateChildren(hashMap);
Log.i("this",reference.child("complaintID").child(present.complaintID).child("status").toString());
status.setText(present.getStatus().toUpperCase(Locale.ROOT));
//Toast.makeText(getContext(),"Item: "+item,Toast.LENGTH_SHORT).show();
}
});
}
}
The sourcecode of the project is given below
non-static method show(FragmentManager,String) cannot be referenced from a static context
my AdminHomeActivity and the AdminComplaintDetailsFragment classes are given below.
Full project source codeof error
AdminHomeFragment.java
package com.example.ecomplaint;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class AdminHomeFragment extends Fragment {
ListView listview;
public static ArrayList arrayList;
FirebaseDatabase rootNode;
DatabaseReference reference;
public static CustomRow adapter;
public static ArrayList adapterData;
FloatingActionButton mainbutton,registerbutton,logoutbutton;
Animation fabOpen,fabClose,rotateForward,rotateBackward;
boolean isOpen=false;
DatabaseReference referenceExpert;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_admin_home,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final ProgressBar simpleProgressBar = (ProgressBar) view.findViewById(R.id.progressBar);
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
mainbutton=(FloatingActionButton) view.findViewById(R.id.floatingActionButton);
registerbutton=(FloatingActionButton) view.findViewById(R.id.registerbutton);
logoutbutton=(FloatingActionButton) view.findViewById(R.id.logout_button);
fabOpen= AnimationUtils.loadAnimation(getContext(),R.anim.from_buttom_anim);
fabClose= AnimationUtils.loadAnimation(getContext(),R.anim.to_buttom_anim);
rotateForward= AnimationUtils.loadAnimation(getContext(),R.anim.rotate_open_anim);
rotateBackward= AnimationUtils.loadAnimation(getContext(),R.anim.rotate_close_anim);
mainbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
animatefab();
}
});
registerbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(getContext(),RegistrationActivity.class);
startActivity(i);
}
});
logoutbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(getContext(),MainActivity.class));
}
});
listview=view.findViewById(R.id.list);
listview.setItemsCanFocus(false);
arrayList = new ArrayList<Complaint>();
adapterData = new ArrayList<Complaint>();
adapter = new CustomRow(getContext(), arrayList);
listview.setAdapter(adapter);
simpleProgressBar.setVisibility(View.VISIBLE);
//arrayList.add(new Complaint("123","this is title","akhil","19bce1564","ragging","rahul","registered"));
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(!arrayList.isEmpty()){
arrayList.clear();
}
for(DataSnapshot dataSnapshot:snapshot.getChildren()){
Complaint complaint=dataSnapshot.getValue(Complaint.class);
// if(complaint.getComplaintFrom().getEmail().equals(FirebaseAuth.getInstance().getCurrentUser().getEmail())){
//get all users complaint
arrayList.add(complaint);
// }
adapter.notifyDataSetChanged();
listview.requestLayout();
simpleProgressBar.setVisibility(View.INVISIBLE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Complaint present = (Complaint) arrayList.get(position);
AdminComplaintDetailsFragment admincomplaintDetailsFragment= new AdminComplaintDetailsFragment(present);
AdminComplaintDetailsFragment.show(((FragmentActivity)getContext()).getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());
//Toast.makeText(getContext(), "hii", Toast.LENGTH_SHORT).show();
}
});
}
private void animatefab(){
if (isOpen){
mainbutton.startAnimation(rotateForward);
registerbutton.startAnimation(fabClose);
logoutbutton.startAnimation(fabClose);
registerbutton.setClickable(false);
logoutbutton.setClickable(false);
isOpen=false;
}
else{
mainbutton.startAnimation(rotateBackward);
registerbutton.startAnimation(fabOpen);
logoutbutton.startAnimation(fabOpen);
registerbutton.setClickable(true);
logoutbutton.setClickable(true);
isOpen=true;
}
}
}
AdminComplaintDetailsFragment.java
package com.example.ecomplaint;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import java.util.Locale;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ComplaintDetailsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class AdminComplaintDetailsFragment extends BottomSheetDialogFragment {
FirebaseDatabase rootNode;
DatabaseReference reference;
String[] items = {"Under investigation","Reviewing complaint","Investigation complete","Case Closed"};
AutoCompleteTextView autoCompleteTxt;
ArrayAdapter<String> adapterItems;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
Complaint present;
public AdminComplaintDetailsFragment() {
// Required empty public constructor
}
public AdminComplaintDetailsFragment(Complaint present){
this.present=present;
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment ComplaintDetailsFragment.
*/
// TODO: Rename and change types and number of parameters
public static AdminComplaintDetailsFragment newInstance(String param1, String param2) {
AdminComplaintDetailsFragment fragment = new AdminComplaintDetailsFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_complaint_details, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if(present.getStatus().equals("registered")){
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
present.setStatus("Seen");
HashMap hashMap=new HashMap();
hashMap.put("status","Seen");
reference.child(present.complaintID).updateChildren(hashMap);
Log.i("this",reference.child("complaintID").child(present.complaintID).child("status").toString());
}
TextView title=view.findViewById(R.id.details_title);
title.setText(present.getTitle());
TextView name=view.findViewById(R.id.details_name);
name.setText(present.getName());
TextView regno=view.findViewById(R.id.details_regno);
regno.setText(present.getRegno());
TextView incident=view.findViewById(R.id.details_info);
incident.setText(present.getIncident_info());
TextView ComplaintFrom=view.findViewById(R.id.complaintFrom);
ComplaintFrom.setText(present.getComplaintFrom().getName());
TextView status=view.findViewById(R.id.details_status);
status.setText(present.getStatus().toUpperCase(Locale.ROOT));
autoCompleteTxt = view.findViewById(R.id.auto_complete_txt);
adapterItems = new ArrayAdapter<String>(getContext(),R.layout.list_item,items);
autoCompleteTxt.setAdapter(adapterItems);
autoCompleteTxt.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
rootNode = FirebaseDatabase.getInstance();
reference = rootNode.getReference("Complaints");
present.setStatus(item);
HashMap hashMap=new HashMap();
hashMap.put("status",item);
reference.child(present.complaintID).updateChildren(hashMap);
Log.i("this",reference.child("complaintID").child(present.complaintID).child("status").toString());
status.setText(present.getStatus().toUpperCase(Locale.ROOT));
//Toast.makeText(getContext(),"Item: "+item,Toast.LENGTH_SHORT).show();
}
});
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在
上进行
adminComplaintDetailsFragment 不是静态的,这是您通过admincomplaintDetailsfragment.show
。使用您初始化的变量
adminComplaintDetailsfragment
。更改
为
The
show
method onAdminComplaintDetailsFragment
is not static which is what you are doing viaAdminComplaintDetailsFragment.show
.Use the variable
admincomplaintDetailsFragment
that you've initialized.Change
to