আমি একটি অ্যানড্রয়েড স্পিনার উইজেটে একটি আইটেম আড়াল করার উপায় খুঁজছি। এটি আপনাকে কোনও স্পিনারকে কোনও আইটেম বাছাই না করে সিমুলেট করার অনুমতি দেবে এবং এটি নিশ্চিত করে যে আইটেমসিলেক্টড () কলব্যাক সর্বদা নির্বাচিত প্রতিটি আইটেমের জন্য কল করা হয় (যদি লুকানো আইটেমটি "বর্তমান" থাকে)। সাধারণত স্পিনারে সর্বদা একটি আইটেম থাকে যা কলব্যাক উত্পন্ন করে না, যথা বর্তমানটি one
স্ট্যাকওভারফ্লোতে আইটেমগুলি কীভাবে অক্ষম (গ্রে আউট) করা যায় তার জন্য কিছু কোড রয়েছে তবে কীভাবে আইটেমগুলির অস্তিত্ব নেই তা সম্পূর্ণরূপে আড়াল করবেন কীভাবে তা নয়।
অনেক পরীক্ষার পরে আমি কিছুটা হ্যাক-ইশ সমাধান নিয়ে এসেছি যা বিভিন্ন পুরানো এবং নতুন অ্যান্ড্রয়েড প্ল্যাটফর্মগুলিতে কাজ করে। এটিতে কিছু ছোট কসমেটিক ত্রুটি রয়েছে যা লক্ষ্য করা শক্ত। "স্পিনারের সাহায্যে এটি করবেন না" ব্যতীত আমি আরও সরকারী সমাধান শুনতে চাই।
এটি সর্বদা স্পিনারের প্রথম আইটেমটি লুকিয়ে রাখে তবে একটি স্বেচ্ছাসেবী আইটেম বা একাধিক আইটেমটি আড়াল করার জন্য মোটামুটি সহজেই বাড়ানো যেতে পারে। আপনার স্পিনার আইটেমগুলির তালিকার শুরুতে একটি খালি স্ট্রিংযুক্ত একটি ডামি আইটেম যুক্ত করুন। স্পিনারের ডায়ালগটি খোলার আগে আপনি বর্তমান স্পিনার নির্বাচনটি আইটেম 0 তে সেট করতে চাইতে পারেন, এটি একটি অনির্বাচিত স্পিনারকে অনুকরণ করবে।
অ্যারেএডাপ্টার পদ্ধতি ওভাররাইড সহ স্পিনার সেটআপ উদাহরণ:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
// Pass convertView as null to prevent reuse of special case views
v = super.getDropDownView(position, null, parent);
}
// Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling
parent.setVerticalScrollBarEnabled(false);
return v;
}
};
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);
tv.setVisibility(View.GONE);
লাইনটি অপ্রয়োজনীয়। এটির মন্তব্য করা কোনও (ভিজ্যুয়াল) পার্থক্য বলে মনে হচ্ছে না, কমপক্ষে অ্যান্ড্রয়েড ৪.৪.২ / কিটকিট (কোনও এলজি / গুগল নেক্সাস ৪ এ)।
setTag(1)
0 অবস্থানের টেক্সটভিউতে ব্যবহার করেছি, তারপরে convertView.getTag() != null
পুনরায় ব্যবহৃত ভিউ 0 পজিশনের জন্য তৈরি 0 উচ্চতার ভিউ বা অন্য স্পিনার আইটেমগুলির জন্য ব্যবহৃত একটি সাধারণ ভিউ কিনা তা নির্ধারণ করতে ব্যবহৃত হত। এটি এমন ছিল যাতে আমি super.getDropDownView(position, convertView, parent)
সবসময় নতুন ভিউ তৈরির পরিবর্তে কখনও কখনও ব্যবহার করতে পারি ।