2011-10-27 10 views
5

में "रिलीज" स्थान नहीं करता है मेरे पास कुछ आइटमों के साथ एक सूचीदृश्य है जिसे "पूर्ण" के रूप में चिह्नित किया जा सकता है। एक टॉगलबटन भी है जो "छुपा वस्तुओं को छुपाएं" कहता है।एंड्रॉइड सेट View.GONE सूचीदृश्य

हालांकि, जब मैं setVisibility की स्थापना करके आइटम छिपाने कर (View.GONE) वहाँ अभी भी है अंतरिक्ष सूची में छोड़ दिया ..

कि सूचीदृश्य में सूची आइटम टॉगल करने के लिए मुश्किल नहीं होना चाहिए?

उत्तर

9

एंड्रॉइड को बदलना: layout_height = "wrap_content" एंड्रॉइड में: layout_height = "fill_parent" ने समस्या को हल किया .. एक लंबी सूची के साथ परीक्षण कर रहा था .. एक छोटी सूची के साथ एक ही सूची सूची के ऊपर थी .. बेवकूफ गलती।

धन्यवाद सभी मदद के लिए .. सबकुछ अब काम कर रहा है।

+0

समाधान पर बधाई। जब आप सक्षम होते हैं, तो कृपया अपने उत्तर को 'स्वीकृत' के रूप में चिह्नित करना सुनिश्चित करें ताकि अन्य लोग आपकी सफलता से सीख सकें। चीयर्स ~ –

+5

भरने वाले माता-पिता के लिए काम नहीं करते हैं। – Thushara

1

आप सूची एडाप्टर भी पर काम करना चाहिए ...

+0

यह काम किया सूची एडाप्टर पर सब कुछ है। –

3

आप पूरी सूची आइटम छिपाने की कोशिश कर रहे हैं? यदि ऐसा है तो मुझे लगता है कि सूची दृश्य इसे पसंद नहीं करेगा क्योंकि यह अभी भी वही मात्रा के साथ गणना कर रहा है। मुझे नहीं लगता कि यह सिर्फ इसे अनदेखा कर देगा क्योंकि यह चला गया है।

स्वच्छ समाधान एक और getCount वापस करने के लिए होगा और केवल उन वस्तुओं को अनदेखा करें जिन्हें आप छिपाना चाहते हैं। या आंतरिक उपयोग सूची से वस्तुओं को हटा दें। जब आप सूची में आइटम की मात्रा संशोधित करते हैं तो एडाप्टर पर notifyDataSetChanged पर कॉल करें।

+0

तो सभी के साथ एक अलग सूची रखें और केवल चेक किए गए आइटम और सही जानकारी प्रदर्शित करने के लिए जो भी सूची आवश्यक है, काम करें .. योजना की तरह लगता है। –

+0

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

+0

'notifyDataSetChanged' वापस 'getCount' मान का उपयोग कर सभी आइटमों के लिए' getView' को कॉल करने के लिए सूची को ट्रिगर करेगा। यह काम कर जाना चाहिए। लेकिन मैं आपकी मदद नहीं कर सकता क्योंकि मुझे कोई विवरण नहीं पता है। ऐसा लगता है कि वास्तव में कुछ और गलत है ... – Knickedi

0

मैं इस समस्या को नाइकी के समाधान और इसके तहत टिप्पणियों का उपयोग करके हल करने में सक्षम था। बस इसे थोड़ा सा स्पष्ट करने के लिए अपने अपेक्षाकृत पूर्ण एडाप्टर दिखाना चाहता था।

मेरे पास एक स्टॉक आइटम के लिए डेटा की एक श्रृंखला रखने के लिए फ़ील्ड के साथ क्लास StockItem है। कस्टम ArrayAdapter के लिए, कन्स्ट्रक्टर डेटाबेस तालिका से पुनर्प्राप्त स्टॉकइटम की पूरी सूची लेता है, और भविष्य में जो भी जोड़/निकालना विधियां मैं जोड़ सकता हूं वह इस सूची (एमएलआईस्ट) पर भी काम करेगा। हालांकि, मैं getView(), और getCount() overrode एक दूसरी सूची (mFilteredList) से पढ़ने के लिए विधि filterList() का उपयोग कर का निर्माण किया:

public class StockItemAdapter extends ArrayAdapter<StockItem> { 

    ... 
    ArrayList<StockItem> mList; 
    ArrayList<StockItem> mFilteredList; 

    public StockItemAdapter(Context context, int resource, ArrayList<StockItem> list) { 
      super(context, resource, list); 

    ... 
     mList = list; 
     mFilteredList = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row = convertView; 
     StockItemHolder holder = null; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 
      row = inflater.inflate(mResource, parent, false); 

      holder = new StockItemHolder(); 
      holder.imageView = (ImageView)row.findViewById(R.id.imageView); 
      ... 
      row.setTag(holder); 
     } else { 
      holder = (StockItemHolder)row.getTag(); 
     } 
     StockItem stockItem = mFilteredList.get(position); 
     if (stockItem.getImage() != null) { 
      holder.imageView.setImageBitmap(stockItem.getImage()); 
     } else { 
      holder.imageView.setImageResource(R.drawable.terencephilip); 
     } 
     ... 
     return row; 
    } 

    @Override 
    public int getCount() { 
     return mFilteredList.size(); 
    } 

    static class StockItemHolder { 

     ImageView imageView; 
     ... 
    } 

    public void filterList(String search) { 

     mFilteredList = new ArrayList<StockItem>(); 
     for (StockItem item : mList) { 
      if (item.getDescription().toLowerCase(Locale.ENGLISH) 
        .contains(search.toLowerCase(Locale.ENGLISH))) { 
       mFilteredList.add(item); 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 

filterList (स्ट्रिंग खोज) एक OnQueryTextListener से कहा जाता है और सूची आइटम को हटा रहा है जिनके विवरण दर्ज टेक्स्ट से मेल नहीं खाते हैं।

बड़ी सूची के मामले में, फ़िल्टरलिस्ट() मुख्य धागे पर एक समस्या हो सकती है, लेकिन यह इस प्रश्न के लिए अप्रासंगिक है।

संपादित करें: आइटम को mfilteredList से वापस करने के लिए getItem (स्थिति) विधि को भी ओवरराइड किया जाना चाहिए।

@Override 
public StockItem getItem(int position) { 

    return mFilteredList.get(position); 
} 
0

कई समाधानों की जांच करने के बाद इनमें से कोई भी खाली जगह के साथ मेरी समस्या हल नहीं कर सका इसलिए मैंने अपने समाधान के साथ आने का फैसला किया। मैं विचार है कि मैं चला गया 2 करने के लिए उसकी दृश्यता सेट) मैं भी 12dp की dividerHeight था की वजह से एक खाली जगह थी 1), भले ही मैं पहली बार इस मुद्दे को मैं अभी भी था हल किया था:

मैं दो मुख्य मुद्दों था सूचीदृश्य

की तय विभक्त ऊंचाई समाधान:

1,1) मैं एक बूलियन सूची के आंकड़ों के एडाप्टर जो मदों की

1 को छोड़ दिया जाता है सूचित करने के लिए कहा,।2) मैं एक खाली लेआउट एक अनुकरण करने के लिए बनाई गई "को छोड़ दिया आइटम"

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="0dp" 
    android:layout_height="0dp"/> 

1,3) मैं अपने सूचीदृश्य में देखा गया, चयनित आइटम, नियमित रूप से आइटम के कई प्रकार है और अब आइटम

public class AdvancedTestAdapter extends BaseAdapter 
{ 

    private static final int  REGULAR_STEP = 0; 
    private static final int  SELECTED_STEP = 1; 
    private static final int  SKIPPED_STEP = 2; 

    private static final int  TYPE_MAX_COUNT = 3; 


    private List<AdvancedTestData> _data; 
    private Context     _context; 
    private Typeface    _fontTypeFace; 

    public AdvancedTestAdapter(Context context, List<AdvancedTestData> data) 
    { 
     _context = context; 
     _data = data; 
     _fontTypeFace = Typeface.createFromAsset(_context.getResources().getAssets(), Consts.Fonts.UniversLTStdBoldCn); 
    } 

    @Override 
    public AdvancedTestData getItem(int position) 
    { 
     return _data.get(position); 
    } 

    @Override 
    public int getCount() 
    { 
     return _data.size(); 
    } 

    @Override 
    public long getItemId(int position) 
    { 
     return 0; 
    } 

    @Override 
    public int getItemViewType(int position) 
    { 
     AdvancedTestData step = getItem(position); 
     if(step.isSkipped()) 
     { 
      return SKIPPED_STEP; 
     } 
     return _data.get(position).isStepSelected() ? SELECTED_STEP : REGULAR_STEP; 
    } 

    @Override 
    public int getViewTypeCount() 
    { 
     return TYPE_MAX_COUNT; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     RegularViewHolder regHolder; 
     SelectedViewHolder selectHolder; 

     AdvancedTestData item = getItem(position); 
     int currentStepType = getItemViewType(position); 

     switch (currentStepType) 
     { 
      case SKIPPED_STEP: 
       convertView = LayoutInflater.from(_context).inflate(R.layout.skipped_item_layout, parent, false); 
       break; 
      case REGULAR_STEP: 
       if (convertView == null) 
       { 
        regHolder = new RegularViewHolder(); 
        convertView = LayoutInflater.from(_context).inflate(R.layout.advanced_test_layout, parent, false); 
        regHolder._regTestUpperHeader = (TextView) convertView.findViewById(R.id.advanced_test_upper_name); 
        regHolder._regTestLowerHeader = (TextView) convertView.findViewById(R.id.advanced_test_lower_name); 
        regHolder._regTestImage = (ImageView) convertView.findViewById(R.id.advanced_test_image); 
        regHolder._regTestWithoutLowerHeader = (TextView) convertView.findViewById(R.id.step_without_lower_header); 

        regHolder._regTestUpperHeader.setTypeface(_fontTypeFace); 
        regHolder._regTestLowerHeader.setTypeface(_fontTypeFace); 
        regHolder._regTestWithoutLowerHeader.setTypeface(_fontTypeFace); 

        convertView.setTag(regHolder); 
       } 
       else 
       { 
        regHolder = (RegularViewHolder) convertView.getTag(); 
       } 

       String upperHeader = item.getTestUpperHeader(); 
       String lowerHeader = item.getTestLowerHeader(); 

       if(lowerHeader.isEmpty()) 
       { 
        regHolder._regTestUpperHeader.setVisibility(View.GONE); 
        regHolder._regTestLowerHeader.setVisibility(View.GONE); 
        regHolder._regTestWithoutLowerHeader.setVisibility(View.VISIBLE); 
        regHolder._regTestWithoutLowerHeader.setText(upperHeader); 
       } 
       else 
       { 
        regHolder._regTestUpperHeader.setVisibility(View.VISIBLE); 
        regHolder._regTestLowerHeader.setVisibility(View.VISIBLE); 
        regHolder._regTestWithoutLowerHeader.setVisibility(View.GONE); 

        regHolder._regTestUpperHeader.setText(upperHeader); 
        regHolder._regTestLowerHeader.setText(lowerHeader); 
       } 

       regHolder._regTestImage.setBackgroundResource(item.getResourceId()); 
       break; 

      case SELECTED_STEP: 

       if (convertView == null) 
       { 
        selectHolder = new SelectedViewHolder(); 
        convertView = LayoutInflater.from(_context).inflate(R.layout.advanced_selected_step_layout, parent, false); 

        selectHolder._selectedTestName = (TextView) convertView.findViewById(R.id.selected_header_text); 
        selectHolder._selectedTestDesc = (TextView) convertView.findViewById(R.id.selected_desc_text); 
        selectHolder._selectedPreFinishControllers = (RelativeLayout) convertView.findViewById(R.id.prefinish_step_controllers); 
        selectHolder._selectedFvEndControllers = (RelativeLayout) convertView.findViewById(R.id.advanced_fv_controllers); 
        selectHolder._selectedNvEndControllers = (RelativeLayout) convertView.findViewById(R.id.advanced_nv_controllers); 

        convertView.setTag(selectHolder); 
       } 
       else 
       { 
        selectHolder = (SelectedViewHolder) convertView.getTag(); 
       } 

       selectHolder._selectedPreFinishControllers.setVisibility(View.INVISIBLE); 
       selectHolder._selectedFvEndControllers.setVisibility(View.INVISIBLE); 
       selectHolder._selectedNvEndControllers.setVisibility(View.INVISIBLE); 


       int testIndex = item.getTestIndex(); 
       ADVANCED_QUICK_TEST_TESPS currentStep = ADVANCED_QUICK_TEST_TESPS.valueOf(testIndex); 

       //show action buttons in each step in advanced mode 
       switch (currentStep) 
       { 
        case QUESTIONS://nothing to show 
         break; 
        case RIGHT_VERIFICATION: 
        case LEFT_VERIFICATION: 
        case BINOCULAR_BALANCE: 
        case SPHERE_VERIFICATION: 
        case ADD_VERIFICATION: 
         if(item.isStepPreFinished()) 
         { 
          selectHolder._selectedPreFinishControllers.setVisibility(View.VISIBLE); 
         } 

         break; 

        case RIGHT_VA: 
        case LEFT_VA: 
        case BINO_VA: 
         selectHolder._selectedPreFinishControllers.setVisibility(View.VISIBLE); 
         break; 
        case FV_DONE: 
         selectHolder._selectedFvEndControllers.setVisibility(View.VISIBLE); 
         break; 
        case FULL_EXAM_DONE: 
         selectHolder._selectedNvEndControllers.setVisibility(View.VISIBLE); 
         break; 
       } 

       String textHeader = String.format("%s\n%s", item.getTestUpperHeader(),item.getTestLowerHeader()); 
       selectHolder._selectedTestName.setText(textHeader); 
       selectHolder._selectedTestDesc.setText(item.getTestDescription()); 

       break; 
     } 

     return convertView; 
    } 

    public void setData(List<AdvancedTestData> data) 
    { 
     _data = data; 
     notifyDataSetChanged(); 
    } 

    public static class RegularViewHolder 
    { 
     public TextView  _regTestWithoutLowerHeader; 
     public TextView  _regTestUpperHeader; 
     public TextView  _regTestLowerHeader; 
     public ImageView _regTestImage; 
    } 

    public static class SelectedViewHolder 
    { 
     public TextView   _selectedTestName; 
     public TextView   _selectedTestDesc; 
     public RelativeLayout _selectedPreFinishControllers; 
     public RelativeLayout _selectedFvEndControllers; 
     public RelativeLayout _selectedNvEndControllers; 
    } 
केवल

को छोड़ दिया यदि आइटम को एडाप्टर को खाली चरण में दिखाया गया है, जैसा कि पिछले चरण में दिखाया गया है, फिर भी मेरे पास विभाजक ऊंचाई मुद्दा

2) विभाजक ऊंचाई को ठीक करने के लिए मैंने विभाजक ऊंचाई को 12 डीपी, प्रत्येक आइटम की बजाय 0 में बदल दिया है छोड़ा नहीं गया है मैंने साथ एक और लेआउट जोड़ा पारदर्शी पृष्ठभूमि (मेरे मामले में divier रंग पारदर्शी होना चाहिए) और 12dp के नीचे गद्दी जोड़ा

उदाहरण के लिए मेरे आइटम

<?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="@android:color/transparent" 
    android:orientation="vertical" 
    android:paddingBottom="12dp" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/quick_test_background_selector" > 

     <ImageView 
      android:id="@+id/advanced_test_image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/done_step" /> 

     <TextView 
      android:id="@+id/advanced_test_upper_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_marginLeft="5dp" 
      android:layout_toRightOf="@id/advanced_test_image" 
      android:gravity="center_vertical" 
      android:text="ETAPE 1" 
      android:textColor="@android:color/black" 
      android:textSize="14sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/advanced_test_lower_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@id/advanced_test_image" 
      android:layout_marginLeft="5dp" 
      android:layout_toRightOf="@id/advanced_test_image" 
      android:gravity="center_vertical" 
      android:text="ETAPE 1" 
      android:textColor="@android:color/black" 
      android:textSize="14sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/step_without_lower_header" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@id/advanced_test_image" 
      android:layout_alignTop="@id/advanced_test_image" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="5dp" 
      android:layout_toRightOf="@id/advanced_test_image" 
      android:gravity="center_vertical" 
      android:text="123" 
      android:textColor="@android:color/black" 
      android:textSize="14sp" 
      android:textStyle="bold" /> 
    </RelativeLayout> 

</RelativeLayout> 

शायद इसकी नहीं सुरुचिपूर्ण में से एक है, लेकिन यह समाधान मेरे लिए

संबंधित मुद्दे