Android 当ListView数据为空时,如何隐藏线性布局?

Android 当ListView数据为空时,如何隐藏线性布局?,android,listview,Android,Listview,我想在listview为空时隐藏整个线性布局? 我试着用setEmptyView,但那东西我不需要 下面是我的listView代码:- @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_notification_task,

我想在listview为空时隐藏整个线性布局? 我试着用setEmptyView,但那东西我不需要

下面是我的listView代码:-

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_notification_task, container, false);
    listschedule=(ListView)view.findViewById(R.id.notificationtaskschedule);
    LinearLayout schduletasks=(LinearLayout)view.findViewById(R.id.sch);
     new pendingscheduletask().execute();
         return view;
}
//daily task pending
private class pendingdailytask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Please Wait");
        mProgressDialog.setCancelable(false);
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }
    @Override
    protected Void doInBackground(Void... args) {
        try {
            arraylist = new ArrayList<HashMap<String, String>>();

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("username", suid));
            JSONObject json = jParser.makeHttpRequest(url_psendingdailytask, "GET", params);

            int success1 = Integer.parseInt(json.getString("success4"));
            Log.d("success4", json.toString());
            if (success1 == 0) {
                Snackbar.make(view, "Not Data Found", Snackbar.LENGTH_LONG).show();
            }
            if (success1 == 1) {
                ownerObj = json.getJSONArray("daily");
                for (int i = 0; i < ownerObj.length(); i++) {
                    jsonobject = ownerObj.getJSONObject(i);

                    daily_task_name.add(jsonobject.getString("t_tname"));
                    daily_task_time.add(jsonobject.getString("t_time"));
                    daily_task_detail.add(jsonobject.getString("t_detail"));
                    daily_task_id.add(jsonobject.getString("t_id"));
                }
            }
        }
        catch(Exception e)
        {}
        return null;
    }
    @Override
    protected void onPostExecute(Void args) {
        listadapter = new ListViewAdapterPendingdailytask(getActivity(), daily_task_name,daily_task_time,daily_task_detail,daily_task_id);
        listdaily.setAdapter(listadapter);

        Utility.setListViewHeightBasedOnChildren(listdaily);
    }
}
public static class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.activity\u notification\u task,container,false);
listschedule=(ListView)view.findViewById(R.id.notificationtaskschedule);
LinearLayout ScheduleTasks=(LinearLayout)view.findViewById(R.id.sch);
新建pendingscheduletask().execute();
返回视图;
}
//每日任务待定
私有类pendingdailytask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mProgressDialog=newprogressdialog(getActivity());
mProgressDialog.setTitle(“请稍候”);
mProgressDialog.setCancelable(假);
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…args){
试一试{
arraylist=新的arraylist();
List params=new ArrayList();
参数add(新的BasicNameValuePair(“用户名”,suid));
JSONObject json=jParser.makeHttpRequest(url_psendingDailyStask,“GET”,参数);
int success1=Integer.parseInt(json.getString(“success4”);
Log.d(“success4”,json.toString());
如果(成功1==0){
make(查看“未找到数据”,Snackbar.LENGTH_LONG.show();
}
如果(成功1==1){
ownerObj=json.getJSONArray(“每日”);
对于(int i=0;i
这里上面的代码是针对listview的,当数据为空时,我想隐藏线性布局。我不知道如何完成这项任务。我试了很多,但没有得到超额的产出

我尝试了setEmptyView,当listview为空时,我可以放置一个textview。但我想隐藏整个线性布局

LinearLayout schduletasks;

}

@覆盖
受保护的void onPostExecute(void args){
listadapter=new ListViewAdapterPendingdailytask(getActivity(),每日任务名称,每日任务时间,每日任务详细信息,每日任务id);
setAdapter(listadapter);
如果(listAdapter==null){
ScheduleTasks.setVisibility(View.Gone);
}否则{
int totalHeight=0;
对于(int i=0;i

}

@覆盖
受保护的void onPostExecute(void args){
listadapter=new ListViewAdapterPendingdailytask(getActivity(),每日任务名称,每日任务时间,每日任务详细信息,每日任务id);
setAdapter(listadapter);
如果(listAdapter==null){
ScheduleTasks.setVisibility(View.Gone);
}否则{
int totalHeight=0;
对于(int i=0;i
首先,您正在根据所有子项的高度设置您的
列表视图
高度,为什么不将其高度设置为
包裹内容

要实现所需,只需在
onPostExecute
中执行以下操作:

@Override
protected void onPostExecute(Void args) {
    //in this if clause make your logic between OR/AND depending on what you want
    if(daily_task_name.size() != 0 || daily_task_time.size != 0 || ....){ 
        listadapter = new ListViewAdapterPendingdailytask(getActivity(), daily_task_name,daily_task_time,daily_task_detail,daily_task_id);
        listdaily.setAdapter(listadapter);
        Utility.setListViewHeightBasedOnChildren(listdaily);
    } else{
        //assuming this is the LinearLayout you want to be gone
        schduletasks.setVisibility(View.GONE);
    }
}

首先,您要根据其所有子项的高度设置您的
列表视图
高度,为什么不将其高度设置为
包裹内容

要实现所需,只需在
onPostExecute
中执行以下操作:

@Override
protected void onPostExecute(Void args) {
    //in this if clause make your logic between OR/AND depending on what you want
    if(daily_task_name.size() != 0 || daily_task_time.size != 0 || ....){ 
        listadapter = new ListViewAdapterPendingdailytask(getActivity(), daily_task_name,daily_task_time,daily_task_detail,daily_task_id);
        listdaily.setAdapter(listadapter);
        Utility.setListViewHeightBasedOnChildren(listdaily);
    } else{
        //assuming this is the LinearLayout you want to be gone
        schduletasks.setVisibility(View.GONE);
    }
}

我将其描述如下:

由于您是从一个服务器加载数据,因此可以在您已经实现的方法
onPostExecute
中完成后加载操作,您只需调用
setVisibility(GON
@Override
protected void onPostExecute(Void args) {
    //in this if clause make your logic between OR/AND depending on what you want
    if(daily_task_name.size() != 0 || daily_task_time.size != 0 || ....){ 
        listadapter = new ListViewAdapterPendingdailytask(getActivity(), daily_task_name,daily_task_time,daily_task_detail,daily_task_id);
        listdaily.setAdapter(listadapter);
        Utility.setListViewHeightBasedOnChildren(listdaily);
    } else{
        //assuming this is the LinearLayout you want to be gone
        schduletasks.setVisibility(View.GONE);
    }
}
linearLayout1.setVisibility(View.GONE)