Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में ListView को प्रोग्रामेटिकली विशिष्ट पोजीशन पर कैसे स्क्रॉल करें?

एंड्रॉइड ListView में प्रोग्रामेटिक स्क्रॉलिंग

यह ट्यूटोरियल ListView को विशिष्ट पोजीशन पर स्मूथली या तुरंत स्क्रॉल करने के तरीकों को दर्शाता है।

लेआउट (activity_main.xml)

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <Button
        android:id="@+id/btnScroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="पोजीशन 22 पर स्क्रॉल करें" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/btnScroll"
        android:layout_marginTop="16dp"
        android:divider="#EEEEEE"
        android:dividerHeight="1dp" />
</RelativeLayout>

MainActivity.java

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);
        Button btnScroll = findViewById(R.id.btnScroll);

        // सैंपल डेटा - 30 आइटम्स
        String[] players = {
            "क्रिस्टियानो रोनाल्डो", "लियोनेल मेस्सी", "नेमार जूनियर", "ईडन हैज़र्ड", "इस्को",
            "गैरेथ बेल", "सर्जियो बुस्केट्स", "ज़्लातान इब्राहिमोविक", "बुफोन", "इकर कैसिलास",
            "राफेल वराने", "ज़िनेदिन जिदान", "मेम्फिस डेपे", "जेरार्ड पिक", "विक्टर वाल्डेस",
            "डेविड डी गेया", "मो सालाह", "रोनाल्डिन्हो", "मार्को रॉयस", "असेंसियो",
            "लुइस फिगो", "सर्जियो रामोस", "मालदिनी", "मार्सेलो", "करीम बेंजेमा",
            "सर एलेक्स फर्ग्यूसन", "पेले", "माराडोना", "क्रूइफ", "बेकनबॉयर"
        };

        List playersList = new ArrayList<>(Arrays.asList(players));
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, playersList);
        listView.setAdapter(adapter);

        btnScroll.setOnClickListener(v -> {
            int targetPosition = 22; // 0-आधारित इंडेक्स
            smoothScrollToPosition(targetPosition);
        });
    }

    private void smoothScrollToPosition(int position) {
        if (position >= 0 && position < adapter.getCount()) {
            // विधि 1: स्मूथ स्क्रॉल (एनिमेटेड) - अनुशंसित
            listView.smoothScrollToPosition(position);
            
            // विधि 2: ऑफसेट के साथ स्मूथ स्क्रॉल (API 11+)
            // listView.smoothScrollToPositionFromTop(position, 0, 500); // 500ms ड्यूरेशन
            
            // विधि 3: तुरंत स्क्रॉल (कोई एनिमेशन नहीं)
            // listView.setSelection(position);
        }
    }
}

स्क्रॉल मेथड्स की तुलना

मेथड एनिमेशन उपयोग का मामला
smoothScrollToPosition(pos) हाँ सामान्य उपयोग, बेहतर UX
smoothScrollToPositionFromTop(pos, offset, duration) हाँ (कस्टम ड्यूरेशन) सटीक पोजीशनिंग, हेडर ऑफसेट
setSelection(pos) नहीं तुरंत जंप, प्रोग्रामेटिक नेविगेशन
setSelectionFromTop(pos, offset) नहीं ऑफसेट के साथ तुरंत पोजीशन

RecyclerView के लिए (मॉडर्न)

// LinearLayoutManager के साथ
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

// स्मूथ स्क्रॉल
recyclerView.smoothScrollToPosition(position);

// या LayoutManager के माध्यम से अधिक नियंत्रण
layoutManager.scrollToPositionWithOffset(position, 0);

उन्नत: विशिष्ट व्यू पर स्क्रॉल करना

// किसी विशेष व्यू को विजिबल एरिया में लाने के लिए
View targetView = listView.getChildAt(position - listView.getFirstVisiblePosition());
if (targetView != null) {
    targetView.requestFocus();
    listView.smoothScrollToPosition(position);
}

// या पोस्ट डिलेड के साथ (लेआउट पूरा होने के बाद)
listView.post(() -> listView.smoothScrollToPosition(position));

सामान्य समस्याएं और समाधान

  • स्क्रॉल काम नहीं करता: सुनिश्चित करें कि एडॉप्टर सेट है और डेटा लोडेड है
  • गलत पोजीशन: एडॉप्टर में हेडर/फुटर होने पर पोजीशन एडजस्ट करें
  • परफॉरमेंस: बड़े डेटासेट के लिए RecyclerView का उपयोग करें
  1. Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें? Android में BroadcastReceiver को प्रोग्रामेटिकली कैसे रजिस्टर करें?

    Android में प्रोग्रामेटिकली BroadcastReceiver रजिस्टर करना यह उदाहरण दर्शाता है कि Android ऐप में BroadcastReceiver को कोड के माध्यम से (प्रोग्रामेटिकली) कैसे रजिस्टर किया जाता है। यह दृष्टिकोण तब उपयोगी होता है जब आप रनटाइम पर डायनामिकली ब्रॉडकास्ट सुनना चाहते हैं, जैसे नेटवर्क कनेक्टिविटी परिवर्तन

  1. Android में GPS को प्रोग्रामेटिकली कैसे सक्षम/अक्षम करें? Android में GPS को प्रोग्रामेटिकली कैसे सक्षम/अक्षम करें?

    Android में GPS स्थिति जांचने और सेटिंग्स खोलने का गाइड महत्वपूर्ण: सुरक्षा कारणों से Android ऐप्स को GPS सीधे सक्षम/अक्षम करने की अनुमति नहीं देता (Android 2.3+ से)। यह ट्यूटोरियल GPS स्थिति जांचने और उपयोगकर्ता को लोकेशन सेटिंग्स स्क्रीन पर ले जाने का सही तरीका दिखाता है। चरण 1: नया प्रोजेक्ट बना

  1. Android में इनकमिंग कॉल को प्रोग्रामेटिकली कैसे उठाएं? Android में इनकमिंग कॉल को प्रोग्रामेटिकली कैसे उठाएं?

    Android में इनकमिंग कॉल प्रोग्रामेटिकली उठाना ⚠️ महत्वपूर्ण चेतावनी: Android 4.1 (API 16) से, थर्ड-पार्टी ऐप्स प्रोग्रामेटिकली कॉल नहीं उठा सकते। यह सुरक्षा प्रतिबंध है। केवल सिस्टम ऐप्स या डिफॉल्ट डायलर (CALL_PRIVILEGED परमिशन के साथ) ऐसा कर सकते हैं। इतिहास और वर्तमान स्थिति Android वर्जनकॉल उठा