Android 当ListView数据为空时,如何隐藏线性布局?
我想在listview为空时隐藏整个线性布局? 我试着用setEmptyView,但那东西我不需要 下面是我的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,
@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)