Android 基于用户类型从ListView隐藏按钮

Android 基于用户类型从ListView隐藏按钮,android,listview,button,hide,Android,Listview,Button,Hide,我有一个登录页面,当用户登录时,它会将他重定向到包含图像、按钮和文本视图的ListViewAct 重定向之后,我创建了一个if条件来检查登录的用户类型是管理员还是普通用户 我有三个按钮(添加、编辑、删除),我想对普通用户隐藏这些按钮 我曾尝试将这些按钮的可见性设置为消失,但结果是,在调试过程中没有发生任何事情,正常用户仍然可以看到这些按钮 MainAct代码: public class MainActivity extends AppCompatActivity { private s

我有一个登录页面,当用户登录时,它会将他重定向到包含图像、按钮和文本视图的ListViewAct

重定向之后,我创建了一个if条件来检查登录的用户类型是管理员还是普通用户

我有三个按钮(添加、编辑、删除),我想对普通用户隐藏这些按钮

我曾尝试将这些按钮的可见性设置为消失,但结果是,在调试过程中没有发生任何事情,正常用户仍然可以看到这些按钮

MainAct代码:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Button btn_add,btn_edit,btn_delete=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = getIntent();
        String username = intent.getStringExtra("Username");
        String password = intent.getStringExtra("Password");

        btn_add = findViewById(R.id.btn_add);
        btn_edit = findViewById(R.id.btn_edit);
        btn_delete = findViewById(R.id.btn_delete);


        if(username.equals("admin") && password.equals("admin")){

            Log.d(TAG, "onCreate: Started.");
            ListView listView = (ListView) findViewById(R.id.li_view);

            ArrayList<PersonInfo> students = new ArrayList<>();

            students.add(new PersonInfo(android.R.drawable.btn_star, "test", "03/27/1998"));

            StudentsListAdapter studentsListAdapter = new StudentsListAdapter(
                    this, R.layout.adapter_view_layout, students);
            listView.setAdapter(studentsListAdapter);
        }

            else if (username.equals("user") && password.equals("user"))
            {
                ListView listView = (ListView) findViewById(R.id.li_view);

                ArrayList<PersonInfo> students = new ArrayList<>();

                students.add(new PersonInfo(android.R.drawable.btn_star, "test", "03/27/1998"));

                StudentsListAdapter studentsListAdapter = new StudentsListAdapter(
                        this, R.layout.adapter_view_layout, students);
                listView.setAdapter(studentsListAdapter);

                if (btn_add != null && btn_edit !=null && btn_delete !=null){
                btn_add.setVisibility(View.GONE);
                btn_edit.setVisibility(View.GONE);
                btn_delete.setVisibility(View.GONE);
            }


        }
    }
}
  public class StudentsListAdapter extends ArrayAdapter<PersonInfo> {
    private Context contxt;
    private int rsrc;
    private List<PersonInfo> persons;


    public StudentsListAdapter( Context context, int resource, List<PersonInfo> _persons) {
        super(context, resource, _persons);
        contxt = context;
        rsrc = resource;
        persons=_persons;
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(contxt);
        View view = inflater.inflate(rsrc, null,false);

        ImageView imageView = view.findViewById(R.id.imgP);
        TextView pName = view.findViewById(R.id.txtView2);
        TextView pBirthday = view.findViewById(R.id.txtView3);

        PersonInfo p = persons.get(position);

        imageView.setImageDrawable(contxt.getResources().getDrawable(p.getImage()));
        pBirthday.setText(p.getBirthday());
        pName.setText(p.getName());

        return view;
    }
}
我没有对ListAdapter上的按钮进行任何更改

我做错了什么? 任何帮助都将不胜感激


谢谢大家!

您声明了
专用按钮btn_add,btn_edit,btn_delete=null
;从那里删除null。
并使
专用按钮btn_添加、btn_编辑、btn_删除
`然后试着运行project,让我知道这个答案对您有帮助。

您声明了
私有按钮btn\u add,btn\u edit,btn\u delete=null
;从那里删除null。
并使
专用按钮btn_添加、btn_编辑、btn_删除
`然后试着运行project,让我知道这个答案对你有帮助。

根据你的
xml
你的
按钮在
列表视图的项目中。因此,您必须在
适配器
中处理它,而不是在
片段
中处理它。检查以下内容:

public class StudentsListAdapter extends ArrayAdapter<PersonInfo> {
    private Context contxt;
    private int rsrc;
    private List<PersonInfo> persons;
    private boolean isAdmin;


    public StudentsListAdapter( Context context, int resource, List<PersonInfo> _persons, boolean _isAadmin) {
        super(context, resource, _persons);
        contxt = context;
        rsrc = resource;
        persons=_persons;
        isAdmin = _isAadmin;
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(contxt);
        View view = inflater.inflate(rsrc, null,false);

        ImageView imageView = view.findViewById(R.id.imgP);
        TextView pName = view.findViewById(R.id.txtView2);
        TextView pBirthday = view.findViewById(R.id.txtView3);

        Button btn_add = view.findViewById(R.id.btn_add);
        Button btn_edit = view.findViewById(R.id.btn_edit);
        Button btn_delete = view.findViewById(R.id.btn_delete);

        if(isAdmin) {
            btn_add.setVisibility(View.VISIBLE);
            btn_edit.setVisibility(View.VISIBLE);
            btn_delete.setVisibility(View.VISIBLE);
        } else {
            btn_add.setVisibility(View.GONE);
            btn_edit.setVisibility(View.GONE);
            btn_delete.setVisibility(View.GONE);
        }

        PersonInfo p = persons.get(position);

        imageView.setImageDrawable(contxt.getResources().getDrawable(p.getImage()));
        pBirthday.setText(p.getBirthday());
        pName.setText(p.getName());

        return view;
    }
}

根据你的
xml
你的
按钮在
列表视图的项目中。因此,您必须在
适配器
中处理它,而不是在
片段
中处理它。检查以下内容:

public class StudentsListAdapter extends ArrayAdapter<PersonInfo> {
    private Context contxt;
    private int rsrc;
    private List<PersonInfo> persons;
    private boolean isAdmin;


    public StudentsListAdapter( Context context, int resource, List<PersonInfo> _persons, boolean _isAadmin) {
        super(context, resource, _persons);
        contxt = context;
        rsrc = resource;
        persons=_persons;
        isAdmin = _isAadmin;
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(contxt);
        View view = inflater.inflate(rsrc, null,false);

        ImageView imageView = view.findViewById(R.id.imgP);
        TextView pName = view.findViewById(R.id.txtView2);
        TextView pBirthday = view.findViewById(R.id.txtView3);

        Button btn_add = view.findViewById(R.id.btn_add);
        Button btn_edit = view.findViewById(R.id.btn_edit);
        Button btn_delete = view.findViewById(R.id.btn_delete);

        if(isAdmin) {
            btn_add.setVisibility(View.VISIBLE);
            btn_edit.setVisibility(View.VISIBLE);
            btn_delete.setVisibility(View.VISIBLE);
        } else {
            btn_add.setVisibility(View.GONE);
            btn_edit.setVisibility(View.GONE);
            btn_delete.setVisibility(View.GONE);
        }

        PersonInfo p = persons.get(position);

        imageView.setImageDrawable(contxt.getResources().getDrawable(p.getImage()));
        pBirthday.setText(p.getBirthday());
        pName.setText(p.getName());

        return view;
    }
}

尝试添加btn_add.setVisibility(View.INVISIBLE);btn_edit.setVisibility(视图不可见);btn_delete.setVisibility(视图不可见);让我知道我的答案是否对你有帮助@sashabley我也尝试过将按钮的可见性设置为不可见,但问题仍然是一样的..同时发布xml文件,我将在我的侧栏中检查以添加btn_add.setVisibility(View.Invisible);btn_edit.setVisibility(视图不可见);btn_delete.setVisibility(视图不可见);让我知道我的答案是否对你有帮助我@sashabley我也尝试过将按钮的可见性设置为不可见,但问题仍然是一样的。同样发布xml文件,我会在我的侧边检查我也尝试过这一步,但没有任何效果。它会为普通用户显示按钮。我已经用XML文件更新了代码@sashabeliypost您的PersonInfo.java类我也发布了PersonInfo class@sashabeliyI,我也尝试了这一步,但没有发生任何变化,它一直为普通用户显示按钮。我已经用XML文件更新了代码@sashabeliypost您的PersonInfo.java类我也发布了PersonInfo class@sashabeliyTank you!非常感谢您的支持,终于成功了!非常感谢。非常感谢您的支持,终于成功了!
        public class PersonInfo {
    private int image;
    private String name;
    private String birthday;

    public PersonInfo(int image, String name, String birthday) {
        this.image = image;
        this.name = name;
        this.birthday = birthday;
    }

    public String getName(){
        return name;
    }
    public int getImage() {
        return image;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}
public class StudentsListAdapter extends ArrayAdapter<PersonInfo> {
    private Context contxt;
    private int rsrc;
    private List<PersonInfo> persons;
    private boolean isAdmin;


    public StudentsListAdapter( Context context, int resource, List<PersonInfo> _persons, boolean _isAadmin) {
        super(context, resource, _persons);
        contxt = context;
        rsrc = resource;
        persons=_persons;
        isAdmin = _isAadmin;
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = LayoutInflater.from(contxt);
        View view = inflater.inflate(rsrc, null,false);

        ImageView imageView = view.findViewById(R.id.imgP);
        TextView pName = view.findViewById(R.id.txtView2);
        TextView pBirthday = view.findViewById(R.id.txtView3);

        Button btn_add = view.findViewById(R.id.btn_add);
        Button btn_edit = view.findViewById(R.id.btn_edit);
        Button btn_delete = view.findViewById(R.id.btn_delete);

        if(isAdmin) {
            btn_add.setVisibility(View.VISIBLE);
            btn_edit.setVisibility(View.VISIBLE);
            btn_delete.setVisibility(View.VISIBLE);
        } else {
            btn_add.setVisibility(View.GONE);
            btn_edit.setVisibility(View.GONE);
            btn_delete.setVisibility(View.GONE);
        }

        PersonInfo p = persons.get(position);

        imageView.setImageDrawable(contxt.getResources().getDrawable(p.getImage()));
        pBirthday.setText(p.getBirthday());
        pName.setText(p.getName());

        return view;
    }
}
ListView listView = (ListView) findViewById(R.id.li_view);
ArrayList<PersonInfo> students = new ArrayList<>();
students.add(new PersonInfo(android.R.drawable.btn_star, "test", "03/27/1998"));

if(username.equals("admin") && password.equals("admin")){
    StudentsListAdapter studentsListAdapter = new StudentsListAdapter(
            this, R.layout.adapter_view_layout, students, true); // true -> admin user
} else if (username.equals("user") && password.equals("user")) {
    StudentsListAdapter studentsListAdapter = new StudentsListAdapter(
            this, R.layout.adapter_view_layout, students, false); // false -> normal user
}

listView.setAdapter(studentsListAdapter);