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