Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android设置可见性功能不工作_Java_Android_Xml - Fatal编程技术网

Java Android设置可见性功能不工作

Java Android设置可见性功能不工作,java,android,xml,Java,Android,Xml,几个小时以来,我一直在以下代码中尝试使用setVisibility()函数: 以下是适配器类: public class ExamScheduleAdapter extends ArrayAdapter<String>{ private ArrayList<String> id; private ArrayList<String> name; private ArrayList<String> date, subject, total, passi

几个小时以来,我一直在以下代码中尝试使用setVisibility()函数:

以下是适配器类:

public class ExamScheduleAdapter extends ArrayAdapter<String>{
private ArrayList<String> id;
private ArrayList<String> name;
private ArrayList<String> date, subject, total, passing;
private Activity context;

Button idview;
TextView nameview, dateview, subjectview, totalview, passview;

public ExamScheduleAdapter(Activity context, ArrayList<String>id, ArrayList<String>name, ArrayList<String>date) {
    super(context, R.layout.fragment_exam_shedule, id);
    this.id = id;
    this.name = name;
    this.date = date;
    this.context = context;
}

public ExamScheduleAdapter(Activity context, ArrayList<String>id, ArrayList<String>name, ArrayList<String>date,
                           ArrayList<String>subject, ArrayList<String>total, ArrayList<String>passing) {
    super(context, R.layout.fragment_exam_shedule, id);
    this.id = id;
    this.name = name;
    this.date = date;
    this.subject = subject;
    this.total = total;
    this.passing = passing;
    this.context = context;
}

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

    LayoutInflater inflater = context.getLayoutInflater();
    View listviewItem = inflater.inflate(R.layout.list_es,null,true);
    idview=(Button) listviewItem.findViewById(R.id.es_list_id);
    nameview=(TextView)listviewItem.findViewById(R.id.es_list_exam_name);
    dateview=(TextView)listviewItem.findViewById(R.id.es_list_date);

    subjectview=listviewItem.findViewById(R.id.es_list_exam_subject);
    totalview=listviewItem.findViewById(R.id.es_list_exam_t_marks);
    passview=listviewItem.findViewById(R.id.es_list_exam_p_marks);

    idview.setText(id.get(position));
    nameview.setText(name.get(position));
    dateview.setText(date.get(position));

    idview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(subjectview.getVisibility()==View.GONE){
                subjectview.setVisibility(View.VISIBLE);
                totalview.setVisibility(View.VISIBLE);
                passview.setVisibility(View.VISIBLE);

                subjectview.invalidate();
                totalview.invalidate();
                passview.invalidate();
                Toast.makeText(getContext(), "Now visible", Toast.LENGTH_LONG).show();
            }
            else{
                subjectview.setVisibility(View.GONE);
                totalview.setVisibility(View.GONE);
                passview.setVisibility(View.GONE);

                subjectview.invalidate();
                totalview.invalidate();
                passview.invalidate();
                Toast.makeText(getContext(), "Now invisible", Toast.LENGTH_LONG).show();
            }
        }
    });

    return listviewItem;
}
}
公共类ExamScheduleAdapter扩展了ArrayAdapter{
私有ArrayList id;
私有ArrayList名称;
private ArrayList日期、主题、总计、通过;
私人活动语境;
按钮idview;
TextView名称视图、日期视图、subjectview、totalview、passview;
公共ExamScheduleApter(活动上下文、ArrayList、ArrayList名称、ArrayList日期){
super(上下文,R.layout.fragment\u检查时间表,id);
this.id=id;
this.name=名称;
this.date=日期;
this.context=上下文;
}
public ExamScheduleApter(活动上下文、ArrayListid、ArrayListname、ArrayListdate、,
ArrayListsubject、ArrayListtotal、ArrayListpassing){
super(上下文,R.layout.fragment\u检查时间表,id);
this.id=id;
this.name=名称;
this.date=日期;
this.subject=主语;
这个.总计=总计;
这个。通过=通过;
this.context=上下文;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater充气器=上下文。getLayoutInflater();
查看列表视图项=充气机。充气(R.layout.list_es,null,true);
idview=(按钮)listviewItem.findViewById(R.id.es\u list\u id);
nameview=(TextView)listviewItem.findViewById(R.id.es\u列表\u考试\u名称);
dateview=(TextView)listviewItem.findViewById(R.id.es\u list\u date);
subjectview=listviewItem.findViewById(R.id.es\u列表\u考试\u科目);
totalview=listviewItem.findViewById(R.id.es\U列表\U考试分数);
passview=listviewItem.findViewById(R.id.es\U列表\U考试\U分数);
idview.setText(id.get(position));
nameview.setText(name.get(position));
dateview.setText(date.get(position));
idview.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(subjectview.getVisibility()==View.GONE){
subjectview.setVisibility(View.VISIBLE);
设置可见性(View.VISIBLE);
passview.setVisibility(View.VISIBLE);
subjectview.invalidate();
totalview.invalidate();
passview.invalidate();
Toast.makeText(getContext(),“现在可见”,Toast.LENGTH_LONG.show();
}
否则{
subjectview.setVisibility(View.GONE);
totalview.setVisibility(View.GONE);
passview.setVisibility(View.GONE);
subjectview.invalidate();
totalview.invalidate();
passview.invalidate();
Toast.makeText(getContext(),“现在不可见”,Toast.LENGTH_LONG.show();
}
}
});
返回listviewItem;
}
}
自定义列表的布局:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp">

<Button
    android:id="@+id/es_list_id"
    android:layout_height="wrap_content"
    android:text="Exam1"
    android:layout_row="0"
    android:layout_column="0"
    android:layout_columnSpan="2"/>

<TextView
    android:layout_height="wrap_content"
    android:id="@+id/es_list_exam_name"
    android:hint="name"
    android:layout_row="0"
    android:layout_column="2"
    android:layout_columnSpan="5" />

<TextView
    android:id="@+id/es_list_date"
    android:layout_height="wrap_content"
    android:hint="2018-07-06"
    android:layout_row="0"
    android:layout_column="8"
    android:layout_columnSpan="3"/>

<TextView
    android:layout_height="wrap_content"
    android:id="@+id/es_list_exam_subject"
    android:hint="Hindi"
    android:layout_row="1"
    android:layout_column="0"
    android:visibility="gone"/>

<TextView
    android:layout_height="wrap_content"
    android:id="@+id/es_list_exam_t_marks"
    android:hint="100"
    android:layout_row="1"
    android:layout_column="4"
    android:visibility="gone"/>

<TextView
    android:layout_height="wrap_content"
    android:id="@+id/es_list_exam_p_marks"
    android:hint="35"
    android:layout_row="1"
    android:layout_column="8"
    android:visibility="gone"/>

</GridLayout>

onclick功能正在被触发,并且它还能够在toast消息正确显示时检查可见性(“现在可见”,或者在其他单击时同时显示消息) 有什么问题吗?我已经尝试了所有的选择。我使用了无效,没有无效,使用了view.go,view.invisible等,但似乎没有任何效果


Plz帮助!提前感谢您。

您的
subjectview
totalview
passview
变量的作用域在适配器中,而不是在每个适配器项中。因此,使用
getView()
实例化的最新一个适配器项将用它们自己的值覆盖它们

getView()
中的变量更改为本地变量,以便每个
OnClickListener
都有自己的副本。

适配器中的
getView()
方法被调用,以创建屏幕上显示的每个列表项视图。这样,每次代码都会覆盖全局变量

Button idview;
TextView nameview, dateview, subjectview, totalview, passview;
您永远不知道它最终将包含哪些列表项视图

使用
final
local变量,而不是声明全局变量:

final Button idview=(Button) listviewItem.findViewById(R.id.es_list_id);
final TextView nameview=(TextView)listviewItem.findViewById(R.id.es_list_exam_name);
final TextView dateview=(TextView)listviewItem.findViewById(R.id.es_list_date);

final TextView subjectview=listviewItem.findViewById(R.id.es_list_exam_subject);
final TextView totalview=listviewItem.findViewById(R.id.es_list_exam_t_marks);
final TextView passview=listviewItem.findViewById(R.id.es_list_exam_p_marks);
(不要忘记移除)


您是否尝试使用notifydataChanged?此处的列表是什么?看起来您不了解listview的工作原理。我已经尝试过了。它不起作用。是否有其他解决方案?如果变量声明为本地变量,则显示错误(红色下划线)在onclicklistener for variables中,是否有其他解决方案???看起来您使用的是Java 7而不是Java 8。然后,该变量也需要显式地
final
,才能传递给一个与click listener类似的非内部类实例。
Button idview;
TextView nameview, dateview, subjectview, totalview, passview;