जब मैं एक प्रासंगिक कार्यवाही बार में एक मानक ListActivity मैं एक वर्ग कि ListView.MultiChoiceModeListener का विस्तार है पर काम कर मिल गया है, लेकिन यह एक ListFragment वर्ग या मैं कैसे जाना होगा तो एक मानक गतिविधि के लिए उपलब्ध नहीं है इसे लागू करने के बारे में ।
मुझे नहीं लगता कि MultiChoiceModeListener
उपलब्ध नहीं है (शायद मुझे समझ में नहीं आया कि आप क्या करने का प्रयास करते हैं)। आपकी टिप्पणी से मैंने माना कि आप संगतता पैकेज से टुकड़ों का उपयोग करते हैं। नीचे एक उदाहरण है FragmentActivity
दो स्थैतिक टुकड़ों के साथ और उनमें से प्रत्येक टुकड़े प्रासंगिक मेनू बार को अपने मेनू विकल्पों के साथ ट्रिगर करता है।
FragmentActivity
बहुत सरल है, यह सिर्फ नीचे दो टुकड़े रखती है:
// the list fragment
public class ListCABFragment extends ListFragment {
private String[] mCountries = { "Romania", "Germany", "England", "USA",
"Japan", "France" };
private static final boolean POST_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (POST_HONEYCOMB) {
// make sure we are on a version above Honeycomb otherwise will
// access things that aren't available
postHoneycombCAB();
} else {
// probably do nothing and implement the normal context menu?!?
}
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, mCountries));
}
@SuppressLint({ "NewApi", "NewApi" })
private void postHoneycombCAB() {
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
((ListView) parent).setItemChecked(position,
((ListView) parent).isItemChecked(position));
return false;
}
});
getListView().setMultiChoiceModeListener(new MultiChoiceModeListener() {
private int nr = 0;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getActivity().getMenuInflater().inflate(R.menu.listcab_menu,
menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
Toast.makeText(getActivity(), "Option1 clicked",
Toast.LENGTH_SHORT).show();
break;
case R.id.item2:
Toast.makeText(getActivity(), "Option2 clicked",
Toast.LENGTH_SHORT).show();
break;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
nr = 0;
}
@Override
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
if (checked) {
nr++;
} else {
nr--;
}
mode.setTitle(nr + " rows selected!");
}
});
}
}
और एक Fragment
जो एक RadioGroup
जो सीएबी जब एक RadioButton
चयन किया जाता है चलाता है से बना एक लेआउट है के लिए अन्य टुकड़ा:
public class SimpleCABFragment extends Fragment implements Callback {
private static final boolean POST_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.frag_simplecabfragment, container,
false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
RadioGroup rg = (RadioGroup) getView().findViewById(R.id.radioGroup1);
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (POST_HONEYCOMB) {
// this could be improved so we don't need to create the
// option
// menu if it is already available
getActivity().startActionMode(SimpleCABFragment.this);
} else {
// something else
}
}
});
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.itemradio) {
Toast.makeText(getActivity(), "CAB for Radiogroup!",
Toast.LENGTH_SHORT).show();
}
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getActivity().getMenuInflater().inflate(R.menu.simplecab_menu, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
}
यदि यह आप जो खोज रहे हैं (आप लेआउट और मेनू फ़ाइलों in my github project सहित एक पूर्ण नमूना पा सकते हैं) है देखें।
क्या आप एंड्रॉइड संस्करण का समर्थन करने की योजना बना रहे हैं? क्या आप 'एक्शनबार शेरलॉक' लाइब्रेरी का उपयोग करते हैं? – Luksprog
तकनीकी रूप से यह एंड्रॉइड 2.3 और उससे ऊपर का समर्थन करता है, मुझे पता है कि एक्शन बार केवल हनीकॉम के ऊपर काम करते हैं जो ठीक है, क्योंकि मैं कोड विकसित कर रहा हूं ताकि 2.3 या उससे कम का उपयोग करने से ऐप को एक तरफ संभाला जा सके और यदि हनीकॉम या ऊपर का उपयोग किया जाता है तो यह उपयोग कर सकता है एक्शन बार, इसलिए नहीं, मैं एक्शनबैरशेलॉक – Boardy