दिलचस्प पोस्ट
युद्ध में एनोटेशंस का उपयोग करके निष्पादन के सर्वलेट फिल्टर ऑर्डर को कैसे परिभाषित किया जाए एनजी-मॉडल और एनजी-बाइंड में क्या अंतर है पायथन डिक्शनरी, कमानों / मूल्यों को एक ही क्रम में कैसे घोषित किया जाता है? JQuery टैग नाम प्रदान कर सकता है? क्या स्विफ्ट में पहुंच संशोधक हैं? एचटीएमएल 5 वीडियो टैग के साथ स्थानीय (हार्ड ड्राइव) वीडियो फाइल खेलें? मुझे अंतरफलक और एक सार वर्ग के बीच अंतर कैसे समझाया जाना चाहिए? जीआईटी कैसे सांकेतिक लिंक को संभालता है? <Html> और / या <body> पर पृष्ठभूमि को लागू करना PHP एक्सएमएल को JSON कन्वर्ट PHP के लिए FOREACH में प्रदर्शन मैं आईफोन पर ओरिएंटेशन परिवर्तन पर वेब ऐप के पैमाने / ज़ूम कैसे रीसेट करूं? Java में sudo privileges के साथ बाश कमांड कैसे निष्पादित करें? एंड्रॉइड ऐप में बटन क्लिक करने पर दूसरी गतिविधि कैसे खोलें कोई मार्ग मेल नहीं है "/ उपयोगकर्ता / साइन-आउट" रेल 3 तैयार करें

एंड्रॉइड: कई क्लिक करने योग्य बटन के साथ सूची दृश्य तत्व

मेरे पास एक ListView जहां ListView में प्रत्येक तत्व में एक TextView और दो अलग बटन हैं कुछ इस तरह:

 ListView -------------------- [Text] [Button 1][Button 2] -------------------- [Text] [Button 1][Button 2] -------------------- ... (and so on) ... 

इस कोड के साथ मैं संपूर्ण आइटम के लिए एक OnItemClickListener बना सकता हूं:

 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> list, View view, int position, long id) { Log.i(TAG, "onListItemClick: " + position); } } }); 

हालांकि, मुझे पूरी वस्तु क्लिक करने योग्य नहीं चाहिए, लेकिन प्रत्येक सूची तत्व के केवल दो बटन

तो मेरा प्रश्न यह है, मैं निम्न पैरामीटर के साथ इन दो बटनों के लिए एक onClickListener कैसे लागू करूँगा:

  • int button (तत्व के बटन को क्लिक किया गया है)
  • int position (जो सूची में तत्व है जिस पर बटन क्लिक हुआ)

अद्यतन: मुझे नीचे दिए गए उत्तर में वर्णित समाधान मिला। अब मैं टच स्क्रीन के माध्यम से बटन क्लिक / टैप कर सकता हूं। हालांकि, मैं इसे मैन्युअल रूप से ट्रैकबॉल के साथ नहीं चुन सकता यह हमेशा पूरी सूची आइटम का चयन करता है और वहां से सीधे सूची में आने वाली सूची सूची में बटनों को अनदेखा करता है, भले ही मैंने सेट किया। .setFocusable(true) setClickable(true) में बटन के लिए .setFocusable(true) और setClickable(true) getView()

मैंने यह कोड मेरे कस्टम सूची एडाप्टर में भी जोड़ा था:

 @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return false; } 

इसका कारण यह है कि कोई सूची आइटम किसी भी अधिक पर चयन नहीं किया जा सकता है। लेकिन नेस्टेड बटनों को चयन करने में मदद नहीं की।

कोई भी विचार है?

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड: कई क्लिक करने योग्य बटन के साथ सूची दृश्य तत्व"

इसका समाधान वास्तव में सोचा था जितना मैंने सोचा था। आप अपने कस्टम एडॉप्टर के getView() विधि को एक सेटऑनक्लिकलाइज़र () में जोड़ सकते हैं जो आप उपयोग कर रहे हैं

myButton.setTag() में बटन से जुड़े किसी भी डाटा को myButton.setTag() साथ जोड़ा जाना है और इसे view.getTag() माध्यम से एक्सेस किया जा सकता है

मैंने एक ट्यूटोरियल के रूप में अपने ब्लॉग पर एक विस्तृत समाधान पोस्ट किया।

यह एक appendage @ znq के जवाब की तरह है …

ऐसे कई मामले हैं जहां आप एक क्लिक किए गए आइटम के लिए पंक्ति स्थिति जानना चाहते हैं और आप यह जानना चाहते हैं कि पंक्ति में कौन से दृश्य का उपयोग किया गया था यह टेबलेट UIs में बहुत अधिक महत्वपूर्ण होगा।

आप निम्न कस्टम एडाप्टर के साथ ऐसा कर सकते हैं:

 private static class CustomCursorAdapter extends CursorAdapter { protected ListView mListView; protected static class RowViewHolder { public TextView mTitle; public TextView mText; } public CustomCursorAdapter(Activity activity) { super(); mListView = activity.getListView(); } @Override public void bindView(View view, Context context, Cursor cursor) { // do what you need to do } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = View.inflate(context, R.layout.row_layout, null); RowViewHolder holder = new RowViewHolder(); holder.mTitle = (TextView) view.findViewById(R.id.Title); holder.mText = (TextView) view.findViewById(R.id.Text); holder.mTitle.setOnClickListener(mOnTitleClickListener); holder.mText.setOnClickListener(mOnTextClickListener); view.setTag(holder); return view; } private OnClickListener mOnTitleClickListener = new OnClickListener() { @Override public void onClick(View v) { final int position = mListView.getPositionForView((View) v.getParent()); Log.v(TAG, "Title clicked, row %d", position); } }; private OnClickListener mOnTextClickListener = new OnClickListener() { @Override public void onClick(View v) { final int position = mListView.getPositionForView((View) v.getParent()); Log.v(TAG, "Text clicked, row %d", position); } }; } 

भावी पाठकों के लिए:

ट्रैकबॉल उपयोग के साथ मैन्युअल रूप से बटन का चयन करने के लिए:

 myListView.setItemsCanFocus(true); 

और संपूर्ण सूची आइटम पर फोकस को अक्षम करने के लिए:

 myListView.setFocusable(false); myListView.setFocusableInTouchMode(false); myListView.setClickable(false); 

यह मेरे लिए ठीक काम करता है, मैं टचस्क्रीन के साथ बटन पर क्लिक कर सकते हैं और एक कीपैड का उपयोग करके एक क्लिक पर ध्यान केंद्रित कर सकते हैं

मेरे पास उपरोक्त प्रयोक्ताओं की तुलना में ज्यादा अनुभव नहीं है लेकिन मुझे इस समस्या का सामना करना पड़ा और मैं इसे नीचे समाधान के साथ हल किया

 <Button android:id="@+id/btnRemove" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_toRightOf="@+id/btnEdit" android:layout_weight="1" android:background="@drawable/btn" android:text="@string/remove" android:onClick="btnRemoveClick" /> 

btnRemoveClick क्लिक करें घटना

 public void btnRemoveClick(View v) { final int position = listviewItem.getPositionForView((View) v.getParent()); listItem.remove(position); ItemAdapter.notifyDataSetChanged(); } 

संभवत: आपको यह कैसे मिला है, लेकिन आप कॉल कर सकते हैं

 ListView.setItemsCanFocus(true) 

और अब आपके बटन फोकस को पकड़ेंगे

मुझे यकीन नहीं है कि सबसे अच्छा तरीका है, लेकिन ठीक काम करता है और सभी कोड आपके ऐरे एडाप्टर में रहता है।

 package br.com.fontolan.pessoas.arrayadapter; import java.util.List; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; import br.com.fontolan.pessoas.R; import br.com.fontolan.pessoas.model.Telefone; public class TelefoneArrayAdapter extends ArrayAdapter<Telefone> { private TelefoneArrayAdapter telefoneArrayAdapter = null; private Context context; private EditText tipoEditText = null; private EditText telefoneEditText = null; private ImageView deleteImageView = null; public TelefoneArrayAdapter(Context context, List<Telefone> values) { super(context, R.layout.telefone_form, values); this.telefoneArrayAdapter = this; this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.telefone_form, parent, false); tipoEditText = (EditText) view.findViewById(R.id.telefone_form_tipo); telefoneEditText = (EditText) view.findViewById(R.id.telefone_form_telefone); deleteImageView = (ImageView) view.findViewById(R.id.telefone_form_delete_image); final int i = position; final Telefone telefone = this.getItem(position); tipoEditText.setText(telefone.getTipo()); telefoneEditText.setText(telefone.getTelefone()); TextWatcher tipoTextWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { telefoneArrayAdapter.getItem(i).setTipo(s.toString()); telefoneArrayAdapter.getItem(i).setIsDirty(true); } }; TextWatcher telefoneTextWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { telefoneArrayAdapter.getItem(i).setTelefone(s.toString()); telefoneArrayAdapter.getItem(i).setIsDirty(true); } }; tipoEditText.addTextChangedListener(tipoTextWatcher); telefoneEditText.addTextChangedListener(telefoneTextWatcher); deleteImageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { telefoneArrayAdapter.remove(telefone); } }); return view; } } 

मुझे पता है कि यह देर हो चुकी है लेकिन इससे मदद मिल सकती है, यह एक उदाहरण है कि मैं कैसे विभिन्न क्लिक क्रियाओं के लिए कस्टम एडॉप्टर वर्ग लिखता हूं

  public class CustomAdapter extends BaseAdapter { TextView title; Button button1,button2; public long getItemId(int position) { return position; } public int getCount() { return mAlBasicItemsnav.size(); // size of your list array } public Object getItem(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.listnavsub_layout, null, false); // use sublayout which you want to inflate in your each list item } title = (TextView) convertView.findViewById(R.id.textViewnav); // see you have to find id by using convertView.findViewById title.setText(mAlBasicItemsnav.get(position)); button1=(Button) convertView.findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //your click action // if you have different click action at different positions then if(position==0) { //click action of 1st list item on button click } if(position==1) { //click action of 2st list item on button click } }); // similarly for button 2 button2=(Button) convertView.findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //your click action }); return convertView; } } 

इस प्रसंस्करण मेनू का प्रयोग करने के लिए प्लेटफ़ॉर्म समाधान नहीं है जो कि लंबे प्रेस पर दिखाता है?

सवाल मेनू संदर्भ मेनू से अवगत है? एक सूची दृश्य में स्टैकिंग बटन में प्रदर्शन प्रभाव पड़ता है, आपके UI को अव्यवस्थित करेगा और प्लेटफ़ॉर्म के लिए अनुशंसित UI डिज़ाइन का उल्लंघन करेगा।

दूसरे पहलू पर; संदर्भ मेनू – निष्क्रिय प्रतिनिधित्व न करने की प्रकृति – अंत उपयोगकर्ता के लिए स्पष्ट नहीं हैं व्यवहार का दस्तावेज़ीकरण करने पर विचार करें?

यह मार्गदर्शिका आपको एक अच्छी शुरुआत देनी चाहिए

http://www.mikeplate.com/2010/01/21/show-a-context-menu-for-long-clicks-in-an-android-listview/