错误:非静态方法show()无法从片段崩溃中的静态上下文中引用

发布于 2025-02-10 17:13:25 字数 12283 浏览 1 评论 0原文

该项目的源代码在

非静态方法下显示(fragmentManager,string),无法从静态上下文中引用 下面给出了我的管理和adminComplaintDetailsfragment类。

完整的项目源源代码ofror

主要项目源代码

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

Main project source code

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静赏你的温柔 2025-02-17 17:13:25

上进行 adminComplaintDetailsFragment 不是静态的,这是您通过admincomplaintDetailsfragment.show
使用您初始化的变量adminComplaintDetailsfragment

更改

AdminComplaintDetailsFragment.show(((FragmentActivity)getContext()).getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());

admincomplaintDetailsFragment.show(requireActivity.getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());

The show method on AdminComplaintDetailsFragment is not static which is what you are doing via AdminComplaintDetailsFragment.show.
Use the variable admincomplaintDetailsFragment that you've initialized.

Change

AdminComplaintDetailsFragment.show(((FragmentActivity)getContext()).getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());

to

admincomplaintDetailsFragment.show(requireActivity.getSupportFragmentManager(), admincomplaintDetailsFragment.getTag());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文