আমি জানতে চাই যে এই রাজ্যগুলির মধ্যে কী পার্থক্য রয়েছে। আমি এটির ব্যাখ্যা দিয়ে কোনও ওয়েবপৃষ্ঠা পাইনি।
আমি জানতে চাই যে এই রাজ্যগুলির মধ্যে কী পার্থক্য রয়েছে। আমি এটির ব্যাখ্যা দিয়ে কোনও ওয়েবপৃষ্ঠা পাইনি।
উত্তর:
চেক করা এবং অ্যাক্টিভেটেড মধ্যে পার্থক্য আসলে বেশ আকর্ষণীয়। এমনকি গুগল ডকুমেন্টেশনও ক্ষমাশীল (নীচে জোর দেওয়া হয়েছে):
... উদাহরণস্বরূপ, একক বা একাধিক নির্বাচন সক্ষম করার সাথে তালিকার দৃশ্যে, বর্তমান নির্বাচনী সেটে দর্শনগুলি সক্রিয় করা হয়েছে। (উম, হ্যাঁ, আমরা এখানে পরিভাষাটির জন্য গভীরভাবে দুঃখিত।) সক্রিয় রাষ্ট্রটি সেট করা দর্শনটির শিশুদের কাছে প্রচার করা হয়।
সুতরাং এখানে পার্থক্য:
লিস্টভিউ (হানিকম্বের পরে) সেটকেচেড () বা সেটঅ্যাক্টিভেটেড () নীচের হিসাবে অ্যান্ড্রয়েড সংস্করণের উপর নির্ভর করে কল করেছে (অ্যান্ড্রয়েড উত্স কোড থেকে নেওয়া):
if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {
if (child instanceof Checkable) {
((Checkable) child).setChecked(mCheckStates.get(position));
} else if (getContext().getApplicationInfo().targetSdkVersion
>= android.os.Build.VERSION_CODES.HONEYCOMB) {
child.setActivated(mCheckStates.get(position));
}
}
এমচেকস্টেটস ভেরিয়েবল নোট করুন। এটি আপনার তালিকার কোন অবস্থানগুলিতে চেক / সক্রিয় আছে তা ট্র্যাক করে। এগুলি অ্যাক্সেসযোগ্য, উদাহরণস্বরূপ, getCheckedItemPositions () এর মাধ্যমে। আরও মনে রাখবেন যে তালিকাভিউ.সেটআইটেমচেকড () -এর জন্য কলটি উপরে বর্ণিত। অন্য কথায়, এটি সমানভাবে সেটআইটেম অ্যাক্টিভেটেড () বলা যেতে পারে।
হানিকম্বের আগে আমাদের তালিকা আইটেমগুলিতে state_ চেক করা প্রতিফলিত করার জন্য আমাদের কাজের ক্ষেত্রগুলি প্রয়োগ করতে হয়েছিল। এর কারণ, তালিকাভিউ কেবলমাত্র লেআউটের শীর্ষতম ভিউতে সেটচেকড () কেবল কল করে (এবং বিন্যাসগুলি চেকযোগ্য প্রয়োগ করে না) ... এবং এটি সাহায্য ছাড়াই প্রচার করে না। এই কাজের ক্ষেত্রগুলি নিম্নলিখিত ফর্মের ছিল: চেকযোগ্যটি কার্যকর করতে মূল বিন্যাস প্রসারিত করুন। এর নির্মাতায়, চেকযোগ্য কার্যকর করে এমন সমস্ত শিশুকে পুনরাবৃত্তভাবে সন্ধান করুন। যখন সেটচেকড () ইত্যাদি ... কল করা হয় তখন সেই দর্শনগুলিতে কলটি পাস করুন। যদি এই মতামতগুলি রাজ্য তালিকা পরীক্ষাযোগ্য (যেমন একটি চেকবক্স) কে রাষ্ট্র_ যাচাইয়ের জন্য আলাদা আঁকতে সক্ষম করে তবে চেক করা রাষ্ট্রটি ইউআইতে প্রতিবিম্বিত হয়।
মধুচক্রের পরে একটি তালিকা আইটেমটিতে একটি দুর্দান্ত ব্যাকগ্রাউন্ড করার জন্য আপনার যা যা করা দরকার তা হল রাজ্য রাজ্যটির জন্য একটি অঙ্কনযোগ্য একটি রাজ্য তালিকা থাকতে হবে_এর জন্য চালিত (এবং অবশ্যই সেটআইটেম চেকড (অবশ্যই ব্যবহার করুন):
<item android:state_pressed="true"
android:drawable="@drawable/list_item_bg_pressed"/>
<item android:state_activated="true"
android:drawable="@drawable/list_item_bg_activated"/>
<item android:drawable="@drawable/list_item_bg_normal"/>
হানিকম্বের পূর্বে একটি তালিকা আইটেমটিতে একটি দুর্দান্ত ব্যাকগ্রাউন্ড করতে আপনি state_checked এর জন্য উপরের মতো কিছু করতে হবে এবং চেকযোগ্য ইন্টারফেসটি প্রয়োগ করতে আপনাকে আপনার শীর্ষতম দৃষ্টিভঙ্গি প্রসারিত করতে হবে। এর মধ্যে আপনার পরে অ্যান্ড্রয়েডকে বলা দরকার যে আপনি যে রাষ্ট্রটি প্রয়োগ করছেন সেটি অনক্রিটড্রেবলযোগ্য স্টেট () প্রয়োগ করে এবং যখনই রাষ্ট্র পরিবর্তন হয় তখন রিফ্রেশড্র্যাবলস্টেট () কল করে true
<item android:state_pressed="true"
android:drawable="@drawable/list_item_bg_pressed"/>
<item android:state_checked="true"
android:drawable="@drawable/list_item_bg_checked"/>
<item android:drawable="@drawable/list_item_bg_normal"/>
... এবং একটি সম্পর্কিত সম্পর্কিত লেআউটে রাষ্ট্র_চেক করা এর সাথে চেকযোগ্য কার্যকর করার কোডটি হতে পারে:
public class RelativeLayoutCheckable extends RelativeLayout implements Checkable {
public RelativeLayoutCheckable(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RelativeLayoutCheckable(Context context) {
super(context);
}
private boolean mChecked = false;
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void setChecked(boolean checked) {
mChecked = checked;
refreshDrawableState();
}
private static final int[] mCheckedStateSet = {
android.R.attr.state_checked,
};
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, mCheckedStateSet);
}
return drawableState;
}
@Override
public void toggle() {
setChecked(!mChecked);
}
}
নিম্নলিখিত ধন্যবাদ:
http://sriramramani.wordpress.com/2012/11/17/custom-states/
স্ট্যাকওভারফ্লো: কীভাবে কাস্টম বোতামের রাজ্য যুক্ত করা যায়
স্ট্যাকওভারফ্লো : কাস্টম চেকযোগ্য ভিউ যা নির্বাচককে প্রতিক্রিয়া জানায়
http://www.charlesharley.com/2012/programming/custom-drawable-states-in-android/
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
http://blog.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/
Selection is a transient property, representing the view (hierarchy) the user is currently interacting with. Activation is a longer-term state that the user can move views in and out of. For example, in a list view with single or multiple selection enabled, the views in the current selection set are activated. (Um, yeah, we are deeply sorry about the terminology here.)
উত্স
setItemChecked()
android:state_activated="true"
ডক অনুসারে :
অ্যান্ড্রয়েড: রাজ্য_নির্বাচিত বুলিয়ান । " true
" যদি এই আইটেমটি ব্যবহার করা উচিত যখন কোনও নির্দেশিক নিয়ন্ত্রণ (যেমন একটি ডি-প্যাডের সাথে তালিকার সাহায্যে নেভিগেট করার সময়) যখন নেভিগেট করার সময় অবজেক্টটি বর্তমান ব্যবহারকারী নির্বাচন হয়; " false
" যদি বস্তুটি নির্বাচন না করা হয় তবে এই আইটেমটি ব্যবহার করা উচিত। ফোকাস (অ্যান্ড্রয়েড: state_focused) পর্যাপ্ত না হলে নির্বাচিত রাষ্ট্রটি ব্যবহার করা হয় (যেমন যখন তালিকার দৃশ্যে ফোকাস থাকে এবং এর মধ্যে একটি আইটেমটি ডি-প্যাড দিয়ে নির্বাচিত হয়)।
অ্যান্ড্রয়েড: রাজ্য_বিহীন বুলিয়ান । " true
" যদি বস্তুটি পরীক্ষা করা হয় তখন এই আইটেমটি ব্যবহার করা উচিত; " false
" যদি বস্তুটি পরীক্ষা না করা হয় তবে এটি ব্যবহার করা উচিত।
অ্যান্ড্রয়েড: স্টেট_অ্যাক্টিভেটেড বুলিয়ান । " true
" যদি আইটেমটি অবিচ্ছিন্ন নির্বাচন হিসাবে সক্রিয় করা হয় তখন এটি ব্যবহার করা উচিত (যেমন স্থির নেভিগেশন ভিউতে পূর্বে নির্বাচিত তালিকা আইটেমটি "হাইলাইট" করা); " false
" যদি বস্তুটি সক্রিয় না হয় তখন এটি ব্যবহার করা উচিত। চালু এপিআই স্তর 11 ।
আমার মনে হয় ডকটি বেশ পরিষ্কার, তাই সমস্যা কী?
এই সমস্যার অন্যান্য সমাধান এখানে দেওয়া হয়েছে: https://github.com/jiahaoliulu/CustomizedListRow/blob/master/src/com/jiahaoliulu/android/customizedlistview/MainActivity.java
আমি কোডটিআইটেমিক্লিকলিস্টনার পদ্ধতিটি ওভাররাইড করেছি এবং কোডে পৃথক কেসগুলি পরীক্ষা করেছি। তবে স্পষ্টতই মারভিনের সমাধান আরও ভাল।
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
CheckedTextView checkedTextView =
(CheckedTextView)view.findViewById(R.id.checkedTextView);
// Save the actual selected row data
boolean checked = checkedTextView.isChecked();
int choiceMode = listView.getChoiceMode();
switch (choiceMode) {
// Not choosing anything
case (ListView.CHOICE_MODE_NONE):
// Clear all selected data
clearSelection();
//printCheckedElements();
break;
// Single choice
case (ListView.CHOICE_MODE_SINGLE):
// Clear all the selected data
// Revert the actual row data
clearSelection();
toggle(checked, checkedTextView, position);
//printCheckedElements();
break;
// Multiple choice
case (ListView.CHOICE_MODE_MULTIPLE):
case (ListView.CHOICE_MODE_MULTIPLE_MODAL):
// Revert the actual selected row data
toggle(checked, checkedTextView, position);
//printCheckedElements();
break;
}
}
});