我真正具有使用该方法setEmptyView麻烦。我试了一下,以实现它在GridView控件和ListView,但他们都没有工作。这里的样品码块:

 networkGames = (GridView) baseLayer.findViewById(R.id.all_game_grid_network);
 networkGames.setBackgroundResource(R.drawable.game_border);
 networkGames.setSelector(R.drawable.game_active_border);
 networkGames.setOnItemClickListener(new NetworkGameListener());
 networkGames.setEmptyView(View.inflate(baseLayer, R.drawable.no_network_games, null));
 networkGames.setAdapter(new NetworkAdapter());

在网络适配器不包含项目:

private class NetworkAdapter extends BaseAdapter {

        /* (non-Javadoc)
         * @see android.widget.Adapter#getCount()
         */
        @Override
        public int getCount() {
            return 0;
        }

        /* (non-Javadoc)
         * @see android.widget.Adapter#getItem(int)
         */
        @Override
        public Object getItem(int position) {
            return null;
        }

        /* (non-Javadoc)
         * @see android.widget.Adapter#getItemId(int)
         */
        @Override
        public long getItemId(int position) {
            return 0;
        }

        /* (non-Javadoc)
         * @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup)
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return null;
        }

    }

我也试图调用networkGames.setAdapter(NULL),但这种不工作无论是。我emtpyView这个样子的:

<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
    android:text="There are currently no network games available. Start a new one."
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">
    </TextView>
</LinearLayout>

我真的不知道我在做什么错。我也看了各种教程,但他们没有metnioned任何问题。

有帮助吗?

解决方案

您需要在您添加了适配器视图布局添加此相同的观点。

适配器视图基于在所述适配器的内容仅改变其可见度。

<强> EDITED:结果 以下布局和代码工作正常:


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
        android:layout_width="fill_parent"
        android:layout_height="300dip"
        android:id="@+id/list_view" />
    <TextView
        android:id="@+id/empty_list_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="List view is empty"
        android:visibility="gone" />
</LinearLayout>

代码:

ListView listView = (ListView) findViewById( R.id.list_view );
listView.setEmptyView( findViewById( R.id.empty_list_view ) );
listView.setAdapter( new ArrayAdapter( this, R.layout.selected_spinner_view, new ArrayList() ) );

其他提示

Karan的答案是斑点上。该适配器视图确实显示仅通过改变自身的知名度VS空观点的知名度空的观点。然而,空视图布局并不一定需要是相同的XML文件,该适配器视图的英寸我发现是有益的,因为我使用单个布局XML文件(包含一个GridView),用于多个活动将二者分开,但我想为它们中的每指定不同emptyView布局。

的关键是空的视图添加到与addContentView活性。请记住,这样做的 的已调用的setContentView指定你的主适配器视图。后

我的代码(在AbstractBaseActivity.onCreate):

View mainView = inflater.inflate(R.layout.imagegrid, null);
GridView gridView = (GridView)mainView.findViewById(R.id.gridView);
View emptyView = inflater.inflate(getIdOfEmptyView(), null, false);
gridView.setEmptyView(emptyView);
// Any additional processing on mainView
setContentView(mainView);
addContentView(emptyView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

在每个子活动我重写getIdOfEmptyView如下:

@Override
protected int getIdOfEmptyView()
{
    return R.layout.emptyView_Favorites;
}

可以限定外部XML布局文件,膨胀,并设置为一个空的图。 只要记住的是,设置膨胀视图的父。

View emptyView = inflater.inflate(R.layout.id_of_your_layoout_file, parent, false);
gridView.setEmptyView(emptyView);

listView.setEmptyView(emptyView);

PacificSky的回答让我差点把我所需要的,但加入空观点与addContentView活动造成的空视图即使除去含有从活动ListView中的片段后留在该活动的容器。此外,对于活性菜单滑动与空视图下或混合显示。

对于我的解决方案是空的视图添加到在作为参数传递到片段的onCreateView容器:

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    mFragmentContainer = container;
    mListView = (ListView) mLayout.findViewById(R.id.list_view);
    mEmptyListView = inflater.inflate(R.layout.empty_list, null, false);
    container.addView(mEmptyListView);
    mListView.setEmptyView(mEmptyListView);
    mListAdapter = new MyListAdapter(getActivity(), mList);
    mListView.setAdapter(mListAdapter);

和从容器中取出空的视图中的片段的onDestroyView

@Override
public void onDestroyView(){
    super.onDestroyView();
    mFragmentContainer.removeView(mEmptyListView);
}

有关我的情况下, gridView.setEmptyView(emptyView) 被称为但它不能显示emptyview。 除非我打电话gridView.setVisibility(View.VISIBLE),因此它通常出现;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top