android - করব - মোবাইল আপডেট




কিভাবে Android এ একটি তালিকা ভিউ গতিশীলভাবে আপডেট করুন (2)

প্রথমে, আপনাকে একটি XML লেআউট তৈরি করতে হবে যা উভয় একটি সম্পাদনা পাঠ্য এবং একটি তালিকা ভিউ রয়েছে।

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- Pretty hint text, and maxLines -->
    <EditText android:id="@+building_list/search_box" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="type to filter"
        android:inputType="text"
        android:maxLines="1"/>

    <!-- Set height to 0, and let the weight param expand it -->
    <!-- Note the use of the default ID! This lets us use a 
         ListActivity still! -->
    <ListView android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1" 
         /> 

</LinearLayout>

ListView এর উপরে একটি চমৎকার EditText এর সাথে এটি সবকিছু সঠিকভাবে রাখবে। তারপরে, আপনি স্বাভাবিকভাবেই একটি তালিকা অ্যাক্টিভিটি তৈরি করুন, তবে onCreate onCreate() পদ্ধতিতে একটি সেটContentView setContentView() কল যোগ করুন যাতে আমরা আমাদের সম্প্রতি ঘোষিত বিন্যাস ব্যবহার করি। মনে রাখবেন যে আমরা তালিকাভiewকে বিশেষভাবে, android:id="@android:id/list" সাথে android:id="@android:id/list" । এটি তালিকা ListActivity জানাতে আমরা কোন তালিকা ListActivity আমাদের ঘোষিত বিন্যাসে ব্যবহার করতে চাই তা জানতে দেয়।

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.filterable_listview);

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

অ্যাপ্লিকেশনটি চালানো এখন উপরের একটি চমৎকার বক্স সহ আপনার পূর্ববর্তী তালিকা ListView দেখানো উচিত। যে বাক্সটি করতে কিছু করার জন্য, আমাদের থেকে ইনপুট নিতে হবে, এবং সেই ইনপুটটিকে তালিকাটি ফিল্টার করতে হবে। যদিও অনেক লোক এটি নিজে করার চেষ্টা করেছে, বেশিরভাগ ListView Adapter ক্লাসগুলি Filter অবজেক্টের সাথে আসে যা স্বয়ংক্রিয়ভাবে ফিল্টারিং সম্পাদন করতে ব্যবহার করা যেতে পারে। আমাদের Filter EditText থেকে ইনপুট পাইপ করতে হবে। যে প্রশংসনীয় সহজ করে তোলে। একটি দ্রুত পরীক্ষা চালানোর জন্য, এই লাইনটি আপনার onCreate() কলটিতে যুক্ত করুন

adapter.getFilter().filter(s);

লক্ষ্য করুন যে আপনার ListAdapter এই কাজটি করতে একটি ভেরিয়েবলে সংরক্ষণ করতে হবে - আমি আমার ArrayAdapter<String> কে আগের থেকে 'অ্যাডাপ্টার' নামে একটি পরিবর্তনশীল ArrayAdapter<String> সংরক্ষণ করেছি।

পরবর্তী ধাপটি EditText থেকে ইনপুট পেতে হয়। এই আসলে চিন্তা একটি বিট লাগে। আপনি আপনার OnKeyListener() যোগ করতে পারেন। যাইহোক, এই শ্রোতা শুধুমাত্র কিছু গুরুত্বপূর্ণ ঘটনা পায়। উদাহরণস্বরূপ, যদি কোন ব্যবহারকারী 'ওয়াইউ' প্রবেশ করে তবে ভবিষ্যদ্বাণীপূর্ণ পাঠ্য সম্ভবত 'চোখের' প্রস্তাব করবে। ব্যবহারকারীটি 'ওয়াইউ' বা 'আই' বাছাই না হওয়া পর্যন্ত, আপনার OnKeyListener একটি কী ইভেন্ট পাবেন না। কিছু এই সমাধান পছন্দ করতে পারে, কিন্তু আমি এটা হতাশাজনক পাওয়া যায়। আমি প্রতিটি কী ইভেন্ট চেয়েছিলেন, তাই আমি ফিল্টারিং বা ফিল্টারিং পছন্দ ছিল। সমাধান একটি TextWatcher । কেবল সম্পাদনা এবং সম্পাদনা TextWatcher একটি TextWatcher যোগ করুন, এবং পাঠ্য ListAdapter প্রতিবার টেক্সট পরিবর্তন করার সময় একটি ফিল্টার অনুরোধ ফিল্টার করুন। OnDestroy() তে OnDestroy() অপসারণ করতে মনে রাখবেন! এখানে চূড়ান্ত সমাধান:

private EditText filterText = null;
ArrayAdapter<String> adapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.filterable_listview);

    filterText = (EditText) findViewById(R.id.search_box);
    filterText.addTextChangedListener(filterTextWatcher);

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

private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        adapter.getFilter().filter(s);
    }

};

@Override
protected void onDestroy() {
    super.onDestroy();
    filterText.removeTextChangedListener(filterTextWatcher);
}

অ্যান্ড্রয়েড এ, আমি কিভাবে একটি তালিকা ListView করতে পারি যা ব্যবহারকারী ইনপুটের উপর ভিত্তি করে ফিল্টার করে, যেখানে আইটেমগুলি TextView মানের ভিত্তিতে গতিশীলভাবে আপডেট করা হয়?

আমি এইরকম কিছু খুঁজছি:

-------------------------
| Text View             |
-------------------------
| List item             |
| List item             |
| List item             |
| List item             |
|                       |
|                       |
|                       |
|                       |
-------------------------

প্রোগ্রাম চলমান একটি বল বন্ধ হবে।

আমি লাইন swaped:

অ্যান্ড্রয়েড: ID = "@ + + building_list / SEARCH_BOX- এর"

সঙ্গে

অ্যান্ড্রয়েড: ID = "@ + + ID / SEARCH_BOX- এর"

সেটা কি সমস্যা হতে পারে? এর জন্য '@ + বিল্ডিং_লিস্ট' কী?





android-widget