2012-08-05 12 views
21

का विस्तार नहीं करता है मेरे पास एक विस्तार योग्य सूचीदृश्य है। मैंने कुछ डमी डेटा डाला है और evrything ठीक लगता है लेकिन जब मैं एप्लिकेशन चलाता हूं तो सभी समूह पतन मोड में होते हैं और जब मैं उनमें से प्रत्येक पर क्लिक करता हूं तो वे प्रभावी नहीं होते हैं। enter image description hereएंड्रॉइड, विस्तारणीय सूची दृश्य पर क्लिक करने के लिए प्रतिक्रिया नहीं है !!! यह

समूह की एक्सएमएल है:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/bg_slider" 
    android:orientation="horizontal" > 


    <TextView 
     android:id="@+id/tvRecipeName" 
     style="@style/normal_text.bold" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="50dp" 
     android:layout_marginRight="5dp" 
     android:focusable="false" 
     android:lines="1" 
     android:maxLines="1" 
     android:text="@string/dd_title" /> 


    <ImageButton 
     android:id="@+id/ibDeleteRecipe" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="15dp" 
     android:background="@color/transparent" 
     android:contentDescription="@string/cd" 
     android:focusable="false" 
     android:src="@android:drawable/ic_menu_delete" /> 

    <View 
     android:layout_width="1dp" 
     android:layout_height="50dp" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/tvRecipeName" 
     android:focusable="false" /> 

</RelativeLayout> 

बच्चे की एक्सएमएल है:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/White" 
    android:gravity="left|center_vertical" > 

    <View 
     android:layout_width="1dp" 
     android:layout_height="35dp" 
     android:layout_toLeftOf="@+id/tvIngredient" 
     android:focusable="false" /> 

    <TextView 
     android:id="@+id/tvIngredient" 
     style="@style/normal_text_black" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="30dp" 
     android:layout_marginRight="5dp" 
     android:lines="1" 
     android:maxLines="1" 
     android:text="@string/dd_title" 
     android:focusable="false" /> 

    <ImageButton 
     android:id="@+id/ibDeleteIngredient" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="15dp" 
     android:background="@color/transparent" 
     android:contentDescription="@string/cd" 
     android:focusable="false" 
     android:src="@android:drawable/btn_dialog" /> 

</RelativeLayout> 

और main.xml में, विस्तार योग्य सूची की परिभाषा है:

इस स्क्रीनशॉट है
<ExpandableListView 
      android:id="@+id/elv" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

मेरे पास एक एडाप्टर है जिसे मैंने इस कोड को लिखा है:

public class ExpAdapter extends BaseExpandableListAdapter { 

    private final String TAG = "ExpAdapter"; 
    private Context context; 
    static final String arrGroupelements[] = {"India", "Australia", "England", "South Africa"}; 
    static final String arrChildelements[][] = { {"Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" }, 
               {"Ponting", "Adam Gilchrist", "Michael Clarke"}, 
               {"Andrew Strauss", "kevin Peterson", "Nasser Hussain"}, 
               {"Graeme Smith", "AB de villiers", "Jacques Kallis"} }; 

    public ExpAdapter(Context context) { 
     this.context = context; 

     Log.i(TAG, "Adapter created."); 
    } 


    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return null; 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 

     return 0; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.elv_child, null); 
     } 

     TextView tvItem = (TextView) convertView.findViewById(R.id.tvIngredient); 
     ImageButton ibDelete = (ImageButton) convertView.findViewById(R.id.ibDeleteIngredient); 
     ibDelete.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.i(TAG, "******"); 
      } 
     }); 
     tvItem.setText(arrChildelements[groupPosition][childPosition]); 

     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return arrChildelements[groupPosition].length; 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return null; 
    } 

    @Override 
    public int getGroupCount() { 
     return arrGroupelements.length; 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return 0; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.elv_group, null); 
     } 

     TextView tvItem = (TextView) convertView.findViewById(R.id.tvRecipeName); 
     ImageButton ibDeleteRcipe = (ImageButton) convertView.findViewById(R.id.ibDeleteRecipe); 
     ibDeleteRcipe.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.i(TAG, "%%%%%%"); 
      } 
     }); 
     tvItem.setText(arrGroupelements[groupPosition]); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

} 

और अंत में, टुकड़ा गतिविधि के कोड में मेरे पास है:

public class ShoppingList extends FragmentActivity {  
     ExpAdapter adapter = new ExpAdapter(this); 
     //Linking expnadable list view 
     expListView = (ExpandableListView) findViewById(R.id.elv); 
     expListView.setAdapter(adapter); 
     expListView.setOnGroupExpandListener(new OnGroupExpandListener() { 
      @Override 
      public void onGroupExpand(int groupPosition) { 
       Log.i(TAG, "Group " + groupPosition + " expanded."); 
      } 
     }); 
     expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 
      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Log.i(TAG, "Group " + groupPosition + " collapsed."); 
      } 
     }); 
     expListView.setOnChildClickListener(new OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
       Log.i(TAG, "item " + childPosition + " of group " + groupPosition + " clicked."); 
       return false; 
      } 
     }); 

} 

जब मैं आवेदन चलाने के लिए और ओम माता-पिता कुछ नहीं होता पर क्लिक करें।

int count = adapter.getGroupCount(); 
for (int position = 1; position <= count; position++) 
    expListView.expandGroup(position - 1); 

अब जब मैं चलाने के आवेदन परिणाम इस स्क्रीनशॉट की तरह है:: मैं खरीदारी वर्ग के अंत में कोड की निम्न लाइनों जोड़ने की कोशिश की enter image description here

मेरे द्वारा हटाए जाने बटन (माता-पिता या बच्चे पर क्लिक करते हैं), मैं देख सकता हूं कि वे प्रभाव लेते हैं (जैसा कि मैं लॉगकैट की जांच करता हूं), हालांकि जब मैं बच्चे या माता-पिता पर क्लिक करता हूं तो कुछ भी नहीं होता है। इसलिए, मुझे नहीं पता कि कॉलबैक क्यों काम नहीं करता है। मेरे शोध के आधार पर मैंने पाया कि मुझे false पर छवि बटनों के Focussable सेट करने की आवश्यकता है। जैसा कि आप एक्सएमएल फाइलों में देख सकते हैं मैंने ऐसा किया लेकिन फिर भी जब मैं अभिभावक और बाल पंक्तियों पर क्लिक करता हूं तो मुझे कोई प्रतिक्रिया दिखाई नहीं दे रही है।

जैसा कि मैंने समाधान खोजने के लिए 6-7 घंटे से अधिक समय व्यतीत किया और सफल नहीं हुआ, मैं आपकी टिप्पणियों और सुझावों के लिए ईमानदारी से सराहना करता हूं। धन्यवाद

उत्तर

31

अंत में मैं समाधान :)

पाया मेरे पास कोई जानकारी नहीं है यह बग या बीमारी या ... है

जैसा कि ऊपर उल्लेख अपना शोध पर मैंने पाया हम फोकस-क्षमता निर्धारित करने की आवश्यकता है कि आधारित छवि दृश्य/बॉक्स के "झूठी" के लिए। मैंने इसे एक्सएमएल फाइल में किया और यह काम नहीं किया। मैंने एक्सएमएल में "सत्य" की फोकस-क्षमता सेट की है और कोड में इसे गलत पर सेट किया है। इस तरह:

@Override 
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.elv_group, null); 
     } 

     TextView tvItem = (TextView) convertView.findViewById(R.id.tvRecipeName); 
     ImageButton ibDeleteRcipe = (ImageButton) convertView.findViewById(R.id.ibDeleteRecipe); 
     ibDeleteRcipe.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) {    
       ... 
      } 
     }); 
     ibDeleteRcipe.setFocusable(false); 

     tvItem.setText(arrGroupElements[groupPosition]); 

     return convertView; 
    } 

इसलिए मेरी उपलब्धि के आधार पर! इसे एक्सएमएल में कोड में "झूठा" पर सेट नहीं किया जाना चाहिए! अब सवाल यह है कि क्या अंतर है? -मुझे पता नहीं है।

+0

यह काम करता है।हालांकि लेआउट एक्सएमएल फ़ाइल में किसी भी फोकस योग्य विशेषता को परिभाषित करना आवश्यक नहीं है। – emaringolo

+0

नोट: हमें एंड्रॉइड डालने की आवश्यकता है:

+0

डिबगिंग के घंटों के बाद, जब मैंने कोड के माध्यम से झूठी पर ध्यान केंद्रित किया, तो मेरे विस्तारणीय सूचीदृश्य के ऑनक्लिक ने फायरिंग शुरू कर दी। यह बहुत अजीब है। किसी को पता है क्यों? –

3

यह विस्तार योग्य सूची दृश्य आइटम में फ़ोकस करने योग्य विचारों के लिए लेआउट एक्सएमएल में android:focusable="false" परिभाषित करने के लिए, लेकिन "ExpandableListView" विशेषता में नहीं आवश्यक है।

उदाहरण: यदि कस्टम पेरेंट सूची आइटम में एक चेकबॉक्स शामिल है (यह स्वचालित रूप से फोकस प्राप्त करेगा) यह नीचे जैसा होना चाहिए।

<CheckBox 
    android:id="@+id/cbkSelectDownload" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:focusable="false"/> 
संबंधित मुद्दे