मैं प्रोग्रामेटिक रूप से किसी विशिष्ट स्थिति में स्क्रॉल कैसे कर सकता हूं ListView
?
उदाहरण के लिए, मेरे पास एक है String[] {A,B,C,D....}
, और मुझे ListView
अपने सूचकांक 21 के शीर्ष दृश्यमान आइटम को सेट करने की आवश्यकता है String[]
।
मैं प्रोग्रामेटिक रूप से किसी विशिष्ट स्थिति में स्क्रॉल कैसे कर सकता हूं ListView
?
उदाहरण के लिए, मेरे पास एक है String[] {A,B,C,D....}
, और मुझे ListView
अपने सूचकांक 21 के शीर्ष दृश्यमान आइटम को सेट करने की आवश्यकता है String[]
।
जवाबों:
एक प्रत्यक्ष स्क्रॉल के लिए:
getListView().setSelection(21);
एक चिकनी स्क्रॉल के लिए:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
काम नहीं कर रहा है, कोई सुझाव?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
पैरामीटर्स की
स्थिति ->
ऑफसेट करने के लिए स्क्रॉल करने की स्थिति ----> स्क्रॉल की
अवधि समाप्त होने पर दृश्य के शीर्ष से स्थिति के पिक्सेल में वांछित दूरी-> स्क्रॉल के लिए उपयोग करने के लिए मिलीसेकंड की संख्या।
नोट: एपीआई ११ से
हैंडलरएक्सप्लॉइट का जवाब था कि मैं क्या देख रहा था, लेकिन मेरी लिस्टव्यू काफी लंबी है और वर्णमाला के साथ भी है। फिर मैंने पाया कि एक ही फ़ंक्शन अन्य मापदंडों को भी ले सकता है :)
संपादित करें: (AFDs सुझाव से)
वर्तमान चयन की स्थिति के लिए:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
अपने कोड को हैंडलर में इस प्रकार रखें,
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
और फिर इस विधि को कॉल करें,
timerDelayRunForScroll(100);
चीयर्स !!!
मैंने OnGroupExpandListener को सेट किया है और onGroupExpand () को ओवरराइड करें:
और setSelectionFromTop () विधि का उपयोग करें जो चयनित आइटम को सेट करता है और सूची के शीर्ष किनारे से चयन y पिक्सेल को रखता है। (यदि टच मोड में है, तो आइटम का चयन नहीं किया जाएगा लेकिन यह अभी भी उचित रूप से तैनात रहेगा।) (एंड्रॉइड डॉक्स)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Listview
पुस्तक डिफ़ॉल्ट रूप से शीर्ष करने के लिए तैनात किया जाएगा, लेकिन चाहते हैं स्क्रॉल करने के लिए करता है, तो दिखाई नहीं तो इस का उपयोग करें:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
यदि कोई व्यक्ति जीमेल ऐप जैसी समान कार्यक्षमता की तलाश में है,
सूची स्क्रॉल को डिफ़ॉल्ट रूप से शीर्ष पर स्थित किया जाएगा। संकेत के लिए धन्यवाद। amalBit। बस इसे घटाओ। बस।
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
हैंडलिंग सूची व्यू स्क्रॉलिंग यूपी / डाउन का उपयोग करके
अगर किसी को बटन का उपयोग करके listView एक पंक्ति ऊपर / नीचे से निपटने में रुचि है। फिर।
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
इसी से मेरा काम बना है। अमलबिट और मेलबोर्न लोप्स द्वारा उत्तरों का संयोजन
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
और फिर इस विधि को कॉल करें जैसे:
timerDelayRunForScroll(400);
-अगर आप चाहते हैं कि सूची विशिष्ट स्थिति तक स्क्रॉल करें:
myListView.smoothScrollToPosition(i);
यदि आप myListView में किसी विशिष्ट आइटम की स्थिति प्राप्त करना चाहते हैं:
myListView.getItemAtPosition(i);
-इसके अलावा यह myListView.getVerticalScrollbarPosition(i);
आपकी मदद कर सकता है।
शुभ लाभ :)
सूची के स्क्रॉल स्थिति को ठीक से परिभाषित करने के लिए आपको दो चीजों की आवश्यकता है:
वर्तमान सूची देखने के लिए स्क्रॉल स्थिति प्राप्त करें:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
सूची दृश्य स्क्रॉल स्थिति सेट करने के लिए:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
मैंने दो अलग-अलग बटन का उपयोग करके ऊपर और नीचे स्क्रॉल करने की अनुमति देने के लिए यह समाधान पाया।
जैसा कि @Nepster द्वारा सुझाया गया है, वर्तमान स्थिति को प्राप्त करने के लिए getFirstVanishPosition () और getLastVanishPosition () का उपयोग करके क्रमिक रूप से स्क्रॉल को कार्यान्वित करें।
final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
.....
if (list.size() > 0) {
ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
}else{
lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());
}
}
});
bnt = (ImageButton) findViewById(R.id.up_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getFirstVisiblePosition()>0){
lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
}else{
lwresult.smoothScrollToPosition(0);
}
}
});
}