তালিকাগুলি ফাঁকা থাকলে খালি দর্শন দেখানো হচ্ছে


135

কিছু কারণে খালি দৃশ্য, একটি TextView এই ক্ষেত্রে, সবসময় মনে হচ্ছে, এমনকি যখন ListView খালি না থাকে। আমি ভেবেছিলাম কখন খালি দৃশ্যটি প্রদর্শিত হবে তা তালিকাভিউ স্বয়ংক্রিয়ভাবে সনাক্ত করবে।

<RelativeLayout android:id="@+id/LinearLayoutAR"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent">
    <ListView android:id="@+id/ARListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"></ListView>
    <ProgressBar android:id="@+id/arProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"></ProgressBar>
    <!-- Here is the view to show if the list is emtpy -->
    <TextView android:id="@id/android:empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="No Results" />
</RelativeLayout>

আমি কীভাবে খালি দৃশ্যটি সঠিকভাবে আঁকতে পারি?

উত্তর:


135

এটি এর মতো হওয়া উচিত:

<TextView android:id="@android:id/empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="No Results" />

আইডি বৈশিষ্ট্যটি নোট করুন ।


75
এভাবে কাজ করার জন্য আপনাকে একটি তালিকাভিউঅ্যাক্টিভিটি ব্যবহার করতে হবে।
নাথান শোয়ারম্যান

2
ওহ আমি দেখতে পাচ্ছি, আমার লিস্টভিউটি আসলে একটি ভিউফ্লিপারের অভ্যন্তরে। তালিকাটি খালি থাকাকালীন আমি অন্য উপায়ে দৃশ্য উপস্থাপন করতে পারি?
শিহান আলম

11
আপনি নিজে যুক্তিটি বাস্তবায়ন করেছেন, তালিকাভিউএকটিভিটির জন্য কীভাবে এটি করা হয় তা দেখার জন্য সোর্সকোডটি একবার দেখুন বা যখন আপনার কোয়েরিটি খালি আছে কিনা তা পরীক্ষা করে দেখুন, যদি আপনার পাঠ্য দর্শনটি ভিসিবিলে সেট করা হয়, অন্যথায় এটি GONE এ সেট করুন
নাথান শোয়ারম্যান

4
আপনি যখন কোনও কাস্টম অ্যাডাপ্টার ব্যবহার করছেন তখন পাঠ্যদর্শনটি ব্যবহার করা কাজ করছে না।
ব্যবহারকারী590849

3
@ শ্যুইজ মিথ্যা! খালি কার্যকারিতাটি ব্যবহার করার জন্য আপনার তালিকার ভিউঅ্যাক্টিভিটির দরকার নেই।
মহিষ

187

যখন আপনি প্রসারিত FragmentActivityবা Activityএবং না ListActivity , আপনি কটাক্ষপাত করা করতে চাইবেন:

ListView.setEmptyView ()


অ্যাপ্লিকেশন উদ্ভাবক এটি করতে কিভাবে কোন ধারণা?
জিনস্নো

118

অ্যাপস্ট্যাটামেটর যেমন বলেছেন, লেআউটে কিছু এরকম:

<ListView android:id="@+id/listView" ... />
<TextView android:id="@+id/emptyElement" ... />

এবং সংযুক্ত কার্যকলাপে:

this.listView = (ListView) findViewById(R.id.listView);
this.listView.setEmptyView(findViewById(R.id.emptyElement));

গ্রিডভিউ দিয়েও কাজ করে ...


4
কমপক্ষে এক ঘন্টা বিভিন্ন জিনিস চেষ্টা করার পরেও এবং কিছুই কাজ না করে (তালিকার ডেটা ছাড়াও "খালি" পাঠ্য দেখানো), তালিকার কার্যকলাপ বাড়ানোর পরিবর্তে কোনও কার্যকলাপে একটি তালিকাভিউ ব্যবহার করার সময় এটি আমার পক্ষে কাজ করেছিল। ধন্যবাদ এডি!
ইভান আর।

আমি কি টেক্সটভিউকে লুকানো বা কিছু তৈরি করব?
হর্ষ এমভি

11
@ হর্ষ অ্যান্ড্রয়েড: দৃশ্যমানতা = "চলে গেছে"
স্ক্রাগার

42

আমি উপরের সমস্ত সমাধান চেষ্টা করেছিলাম I আমি সমস্যাটি সমাধান করতে এসেছি re এখানে আমি সম্পূর্ণ সমাধান পোস্ট করছি।

XML ফাইল :

<RelativeLayout
    android:id="@+id/header_main_page_clist1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp"
    android:paddingBottom="10dp"
    android:background="#ffffff" >

    <ListView
        android:id="@+id/lv_msglist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/divider_color"
        android:dividerHeight="1dp" />

    <TextView
        android:id="@+id/emptyElement"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="NO MESSAGES AVAILABLE!"
        android:textColor="#525252"
        android:textSize="19.0sp"
        android:visibility="gone" />
</RelativeLayout>

টেক্সটভিউ ( "@ + আইডি / ফাঁকা উপাদান" ) খালি তালিকা দেখার জন্য স্থানধারক।

জাভা পৃষ্ঠার কোড এখানে:

lvmessage=(ListView)findViewById(R.id.lv_msglist);
lvmessage.setAdapter(adapter);
lvmessage.setEmptyView(findViewById(R.id.emptyElement));

অ্যাডাপ্টারকে তালিকাভিউতে আবদ্ধ করার পরে খালি ভিউ স্থাপন মনে রাখবেন .মাইন প্রথমবারের জন্য কাজ করছে না এবং সেটএডাপ্টারের পরে আমি সেটএম্পটিভিউ সরানোর পরে এটি এখন কাজ করছে।

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


1
এই যোগ করার পরে আমার জন্য কাজ android:layout_below="@+id/lv_msglist"জন্য emptyElement
Behnam Heydari

16

আমি আপনাকে এইরকম ভিউস্টাবগুলি ব্যবহার করার জন্য অত্যন্ত পরামর্শ দিচ্ছি

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <ViewStub
        android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout="@layout/empty" />
</FrameLayout>

সিরিল মোটটিয়ের পুরো উদাহরণটি দেখুন


8
<ListView android:id="@+id/listView" ... />
<TextView android:id="@+id/empty" ... />
and in the linked Activity:

this.listView = (ListView) findViewById(R.id.listView);
this.listView.setEmptyView(findViewById(R.id.empty));

যদি আপনি সমর্থন লাইব্রেরি ব্যবহার করেন তবে এটি ফ্র্যাগমেন্টএটিভিটির সাথে স্পষ্টভাবে কাজ করে। এপিআই 17 অর্থাত্ 4.2.2 চিত্রের জন্য বিল্ডিং দ্বারা এটি পরীক্ষিত।


7

ক্রিয়াকলাপ কোড, এটি প্রসারিত করা গুরুত্বপূর্ণ ListActivity

package com.example.mylistactivity;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import com.example.mylistactivity.R;

// It's important to extend ListActivity rather than Activity
public class MyListActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylist);

        // shows list view
        String[] values = new String[] { "foo", "bar" };

        // shows empty view
        values = new String[] { };

        setListAdapter(new ArrayAdapter<String>(
                this,
                android.R.layout.simple_list_item_1,
                android.R.id.text1,
                values));
    }
}

লেআউট এক্সএমএল, উভয় দর্শনের আইডি গুরুত্বপূর্ণ।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- the android:id is important -->
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

    <!-- the android:id is important -->
    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="i am empty"/>
</LinearLayout>

7

আপনাকে কেবল নতুন আইডি তৈরি করার দরকার নেই এটি যুক্ত করার জন্য, নীচের মতো কিছু কাজ করবে।

বিন্যাসে:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@android:id/list"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@android:id/empty"
    android:text="Empty"/>

তারপরে ক্রিয়াকলাপে:

    ListView listView = (ListView) findViewById(android.R.id.list);
    listView.setEmptyView(findViewById(android.R.id.empty));

4

আমার এই সমস্যা ছিল আমাকে আমার ক্লাসটি ক্রিয়াকলাপের চেয়ে তালিকাগুলি বাড়ানো এবং XML- এ আমার তালিকাটির নতুন নামকরণ করতে হয়েছিলandroid:id="@android:id/list"


2

একটি প্রোগ্রামগতভাবে সমাধান হবে:

TextView textView = new TextView(context);
textView.setId(android.R.id.empty);
textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setText("No result found");
listView.setEmptyView(textView);

-3

প্রথমে তালিকায় কিছু মান রয়েছে:

if (list.isEmpty()) {
    listview.setVisibility(View.GONE);
}

যদি তা ঠিক থাকে তবে অন্যথায় ব্যবহার করুন:

else {
     listview.setVisibility(View.VISIBLE);
}

আপনি কি আরও বিস্তারিত জানাতে যত্ন করবেন list?
রায় লি

এটি একটি
অ্যারেলিস্ট

অবজেক্ট [] প্রতিক্রিয়া = ইউটিলিটি. পার্সস্টেস্টেশনঅগ্রহেন্স (অবজেক্ট); int statusCode = (পূর্ণসংখ্যা) প্রতিক্রিয়া [0]; @ সাপ্রেস ওয়ার্নিংস ("চেক না করা") অ্যারেলিস্ট <স্টেশন> তালিকা = (অ্যারেলিস্ট <স্টেশানস>) প্রতিক্রিয়া [2];
অবনীশ কুমার

ভাল ভাল, আমি আপনাকে মন্তব্যগুলির চেয়ে আপনার উত্তরের অংশ হিসাবে রাখার পরামর্শ দিচ্ছি। আপনি কী লিখছেন তার নির্দিষ্ট প্রসঙ্গে অন্যদের বোঝার জন্য এটি গুরুত্বপূর্ণ to তদ্ব্যতীত, আপনি যদি ওপির প্রশ্নের সাথে আপনার উত্তরটি সম্পর্কিত করতে পারেন তবে এটিও সেরা। অবশেষে, তাই আপনাকে স্বাগতম।
রায় লি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.