আমি কীভাবে প্রোগ্রামে কোনও নির্দিষ্ট অবস্থানে স্ক্রোল করতে পারি 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);
প্যারামিটারের
অবস্থান ->
অফসেটে স্ক্রোল করার অবস্থান ----> স্ক্রোলিংয়ের
সময়সীমা শেষ হওয়ার পরে অবস্থানের শীর্ষস্থান থেকে পিক্সেলগুলিতে পছন্দসই দূরত্ব-> স্ক্রোলটির জন্য ব্যবহারের জন্য মিলিসেকেন্ডের সংখ্যা
দ্রষ্টব্য: এপিআই 11 থেকে
হ্যান্ডলারএক্সপ্লয়েটের উত্তরটি আমি যা খুঁজছিলাম তা ছিল তবে আমার তালিকাভিউটি বেশ দীর্ঘ এবং বর্ণমালা স্ক্রোলারের সাথেও রয়েছে। তখন আমি দেখতে পেলাম যে একই ফাংশনটি অন্যান্য প্যারামিটারগুলিও নিতে পারে :)
সম্পাদনা: (এএফডি পরামর্শ থেকে)
বর্তমান নির্বাচন অবস্থান:
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);
চিয়ার্স !!!
আমি অনগ্রুপ এক্সপ্যান্ডলাইস্টেনার সেট করেছি এবং গ্রুপ-এক্সপান্ডে ওভাররাইড () হিসাবে:
এবং 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);
হ্যান্ডলিং তালিকাটি ইউপি / ডাউন ব্যবহার করে স্ক্রলিং দেখুন.বাটন ব্যবহার করুন
যদি কেউ তালিকা পরিচালনা করতে আগ্রহী হয় তবে বোতামটি ব্যবহার করে এক সারি উপরে / নিচে দেখুন। তারপর।
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.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);
দুটি পৃথক বোতাম ব্যবহার করে উপরে স্ক্রোলটি উপরে উঠার অনুমতি দেওয়ার জন্য আমি এই সমাধানটি পেয়েছি।
@ নেপস্টার দ্বারা প্রস্তাবিত হিসাবে আমি বর্তমান অবস্থানটি পেতে getFrstVisiblePosition () এবং getLastVisiblePosition () ব্যবহার করে প্রোগ্রামটিমে স্ক্রোলটি বাস্তবায়ন করি।
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);
}
}
});
}