سؤال

أواجه مشكلة حقًا في استخدام طريقة SetMeMtIveiew. حاولت تنفيذه في Gridview و ListView ، لكن كلاهما لم ينجح. هنا نموذج codeblock:

 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>

أنا حقًا لا أعرف ما أفعله خطأ. قرأت أيضًا العديد من البرامج التعليمية ، لكن لم يسبق أي منها إلى أي مشاكل.

هل كانت مفيدة؟

المحلول

تحتاج إلى إضافة هذا العرض نفسه في التصميم الذي أضفت فيه AdapterView.

يغير AdapterView فقط ظهوره بناءً على المحتويات في المحول.

تحرير:
التخطيط التالي والرمز يعمل بشكل جيد:


<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() ) );

نصائح أخرى

إجابة كاران هي بقعة. يعرض المحول بالفعل العرض الفارغ من خلال تغيير رؤية الرؤية الخاصة به مقابل رؤية العرض الفارغ. ومع ذلك ، لا يحتاج تخطيط العرض الفارغ بالضرورة إلى أن يكون في نفس ملف XML مثل ملف AdapterView. لقد وجدت أنه من المفيد فصل الاثنين لأنني أستخدم ملف XML واحد تخطيط واحد (يحتوي على GridView) للأنشطة المتعددة ، لكنني أردت تحديد تخطيطات مختلفة مختلفة لكل منها.

المفتاح هو إضافة العرض الفارغ إلى النشاط باستخدام AddContentView. تذكر أن تفعل هذا بعد لقد دعوت SetContentView تحديد عرض المحول الرئيسي الخاص بك.

الكود الخاص بي (في الملخص BaseActivity.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);

لقد جعلني إجابة باسيفيكسكي تقريبًا إلى ما أحتاجه ، ولكن إضافة المنظر الفارغ إلى النشاط مع 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 (فارغفيو) ولكنه لا يظهر VarmeView. ما لم اتصلت بـ GridView.setVisibility (view.visible) ، لذلك تظهر بشكل طبيعي ؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top