Problem removing ListView footer using removeFooterView()

时间秒杀一切 提交于 2019-12-23 15:44:05

问题


I am trying to remove footer I've set using the same reference I used to set it up. However, nothing happens.

protected void onPostExecute(ArrayList<Recipe> result) {

        int CHEF_ID = ChefsRecipeList.this.getIntent().getIntExtra("CHEF_ID", 0);

        ListView recipeListView = (ListView)findViewById(android.R.id.list);

        View footer = getLayoutInflater().inflate(R.layout.chef_recipe_list_footer, null);


        if(!addToExisting){

            RecipeManager.getInstance().setRecipeList(result);

            View header = getLayoutInflater().inflate(R.layout.chef_recipe_list_header, null);

            ImageView loadButton = (ImageView)footer.findViewById(R.id.loadmore);

            loadButton.setOnClickListener( new OnClickListener() {

                @Override
                public void onClick(View v) {

                    int CHEF_ID = ChefsRecipeList.this.getIntent().getIntExtra("CHEF_ID", 0);

                    try {

                        Log.d("NXTLAOD", "http://api.foodnetworkasia.com/api/mobile/get_recipes?chefId="+ChefManager.getInstance().getChef(CHEF_ID).getId()+
                        "&format=xml&startIndex="+(RecipeManager.getInstance().getRecipeList().size()+1)+"&endIndex="+(RecipeManager.getInstance().getRecipeList().size()+24));
                        new XMLRecipesParser(true).execute(new URL[] { new URL("http://api.foodnetworkasia.com/api/mobile/get_recipes?chefId="+ChefManager.getInstance().getChef(CHEF_ID).getId()+
                        "&format=xml&startIndex="+RecipeManager.getInstance().getRecipeList().size()+"&endIndex="+(RecipeManager.getInstance().getRecipeList().size()+24))  }  );

                    } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
            });

            ImageView chefPhoto = (ImageView)header.findViewById(R.id.chef_photo);

            chefPhoto.setImageBitmap(ImageURLLoader.LoadImageFromURL(ChefManager.getInstance().getChef(CHEF_ID).getLargeURL()));

            TextView chefBio = (TextView)header.findViewById(R.id.chef_bio);

            chefBio.setText(ChefManager.getInstance().getChef(CHEF_ID).getDescription());


            recipeListView.addHeaderView(header);
            recipeListView.addFooterView(footer);

            recipeListView.setAdapter(new RecipeAdapter(ChefsRecipeList.this));

        }else{

            RecipeManager.getInstance().mergeLists(result);

            RecipeAdapter wrapperAdapter=(RecipeAdapter) ((HeaderViewListAdapter)recipeListView.getAdapter()).getWrappedAdapter();


            wrapperAdapter.notifyDataSetChanged();



        }

        if(totalRecipes == RecipeManager.getInstance().getRecipeList().size()){ 

            recipeListView.removeFooterView(footer);
            Log.d("FOODREM", "Footer Removed");

        }

        Log.d("ITCOUNT", totalRecipes+"-"+RecipeManager.getInstance().getRecipeList().size());
        updateItemscount();

    }

}

回答1:


You might have to call listView1.setAdapter(adapter) to refresh the listview. If that doesn't work, another solution is to make the height of the footer view to 0px. This is a better solution if you are planning to use the footer view later on again.




回答2:


You can also set the footer visibility for GONE. To do that, you need to wrap the content of your footer using a linearlayout, then you set the linearlayout visibility to GONE.

In the example bellow I set the visibility of LogoLinearLayout to GONE.

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/LogoLinearLayout"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/Logo"
                android:src="@drawable/Logo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/spacing3"
                android:layout_marginBottom="@dimen/spacing3"
                android:layout_gravity="center" />
        </LinearLayout>
    </LinearLayout>



回答3:


I have seen this type of solution (setting the footer view's height to 0, or setting negative margins..) on many posts related to hiding the footer issue, and it does work, but with 2 issues: - the list will not respect the transcriptMode="normal" anymore, in the sense that, if the last item is visible and a new item is added to the list, the list will not scroll to the newly added item; - when keyboard is shown and list size changed, the list again will not show you the last item.



来源:https://stackoverflow.com/questions/6764238/problem-removing-listview-footer-using-removefooterview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!