2017-07-05 6 views
0

Ich versuche Filterabschnitt durch gridView zu tun. In einem großen Bildschirm ist es in Ordnung. Aber wenn es kleiner Bildschirm ist, funktioniert nicht richtig. (Eine Ansicht ist zwei oder drei Mal, einige verschwinden). Dies liegt daran, dass die Schrumpfung und der Bildlauf von gridView item angezeigt werden. Also versuche ich, gridView scroll zu entfernen.Android: GridView-Set nicht scrollbar?

Meine Tätigkeit ist.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:fillViewport="true" 
    android:scrollbars="vertical"> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark" 
     app:titleTextColor="@android:color/white" 
     app:contentInsetStartWithNavigation="0dp"> 
    </android.support.v7.widget.Toolbar> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="11" 
      android:orientation="vertical" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp"> 

     <TextView 
      android:text="Price" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="start|bottom" 
      android:textStyle="bold" 
      android:textColor="@color/colorPrimary" 
      android:layout_marginTop="20dp" /> 

     <TextView 
      android:id="@+id/seekbar_value" 
      android:text="Any" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center|bottom" 
      android:textStyle="bold"/> 


     <org.florescu.android.rangeseekbar.RangeSeekBar 
      android:id="@+id/range_seekbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:showLabels="false" 
      app:valuesAboveThumbs="false" 
      app:barHeight="5dp" 
      app:alwaysActive="true" 
      app:thumbDisabled="@drawable/seekbar_button" 
      app:textAboveThumbsColor="@color/colorPrimary" 
      app:defaultColor="@color/colorPrimary" 
      app:activeColor="@color/colorButton" /> 

     <TextView 
      android:text="Block" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="start|bottom" 
      android:textStyle="bold" 
      android:textColor="@color/colorPrimary" 
      android:layout_marginTop="20dp"/> 

      <GridView 
       android:id="@+id/gridViewBlock" 
       android:numColumns="auto_fit" 
       android:gravity="center" 
       android:columnWidth="60dp" 
       android:stretchMode="columnWidth" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp"/> 

      <TextView 
      android:text="Floor" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="start|bottom" 
      android:textStyle="bold" 
      android:textColor="@color/colorPrimary" 
      android:layout_marginTop="20dp"/> 

      <!-- This Grid View is my problem --> 
      **<GridView 
       android:id="@+id/gridViewFloor" 
       android:numColumns="auto_fit" 
       android:gravity="center" 
       android:columnWidth="60dp" 
       android:stretchMode="columnWidth" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp"/>** 

     </LinearLayout> 

     <Button 
      android:text="See result" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:textStyle="bold" 
      android:background="@color/colorButton" 
      android:textColor="@android:color/white" /> 

    </LinearLayout> 

</LinearLayout> 
</ScrollView> 

Und ich Hinzufügen programmatisch gridview Artikel:

public class FIlterActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private RangeSeekBar seekbar; 
    private TextView seekbarValue; 
    private GridView gridViewBlock; 
    private GridView gridViewFloor; 
    private FilterButtonAdapter filterBlockAdapter; 
    private FilterButtonAdapter filterFloorAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_filter); 
     toolbar = (Toolbar)findViewById(R.id.toolbar); 
     toolbar.setTitle(getString(R.string.activity_filter)); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     gridViewBlock = (GridView) findViewById(R.id.gridViewBlock); 

     filterBlockAdapter = new FilterButtonAdapter(this, Filter.filter_blocks, Filter.blocks_selected); 
     gridViewBlock.setAdapter(filterBlockAdapter); 

     gridViewBlock.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

       final TextView textView = (TextView)view.findViewById(R.id.filter_button); 
       String value = textView.getText().toString(); 
       boolean contain = false; 

       for(int i = 0; i < Filter.blocks_selected.size(); i++){ 
        if(value.equals(Filter.blocks_selected.get(i).toString())) { 
         view.setBackgroundResource(R.drawable.button_disabled); 
         Filter.blocks_selected.remove(i); 
         if(Filter.blocks_selected.size() == 0){ 
          Filter.blocks_selected.add(Filter.filter_blocks[0]); 
          adapterView.getChildAt(0).setBackgroundResource(R.drawable.button_enabled); 
         } 
         contain = true; 
         break; 
        } 
       } 
       if(!contain){ 
        if(value.equals("Any")){ 
         Filter.blocks_selected.clear(); 
         Filter.blocks_selected.add(Filter.filter_blocks[0]); 
         for(int i = 1; i < Filter.filter_blocks.length; i++){ 
          adapterView.getChildAt(i).setBackgroundResource(R.drawable.button_disabled); 
         } 
        } 
        else{ 
         for(int i = 0; i < Filter.blocks_selected.size(); i++){ 
          if(Filter.blocks_selected.get(i).toString().equals("Any")){ 
           adapterView.getChildAt(0).setBackgroundResource(R.drawable.button_disabled); 
           Filter.blocks_selected.remove(i); 
           break; 
          } 
         } 
        } 
        view.setBackgroundResource(R.drawable.button_enabled); 
        Filter.blocks_selected.add(value);} 
       filterBlockAdapter.notifyDataSetChanged(); 
      } 
     }); 

     gridViewFloor = (GridView) findViewById(R.id.gridViewFloor); 
     filterFloorAdapter = new FilterButtonAdapter(this, Filter.filter_floors, Filter.floor_selected); 
     gridViewFloor.setAdapter(filterFloorAdapter); 


     gridViewFloor.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 


       final TextView textView = (TextView)view.findViewById(R.id.filter_button); 
       String value = textView.getText().toString(); 
       boolean contain = false; 

       for(int i = 0; i < Filter.floor_selected.size(); i++){ 
        if(value.equals(Filter.floor_selected.get(i).toString())) { 
         view.setBackgroundResource(R.drawable.button_disabled); 
         Filter.floor_selected.remove(i); 
         if(Filter.floor_selected.size() == 0){ 
          Filter.floor_selected.add(Filter.filter_floors[0]); 
          adapterView.getChildAt(0).setBackgroundResource(R.drawable.button_enabled); 
         } 
         contain = true; 
         break; 
        } 
       } 
       if(!contain){ 
        if(value.equals("Any")){ 
         Filter.floor_selected.clear(); 
         Filter.floor_selected.add(Filter.filter_floors[0]); 
         for(int i = 1; i < Filter.filter_floors.length; i++){ 
          adapterView.getChildAt(i).setBackgroundResource(R.drawable.button_disabled); 
         } 
        } 
        else{ 
         for(int i = 0; i < Filter.floor_selected.size(); i++){ 
          if(Filter.floor_selected.get(i).toString().equals("Any")){ 
           adapterView.getChildAt(0).setBackgroundResource(R.drawable.button_disabled); 
           Filter.floor_selected.remove(i); 
           break; 
          } 
         } 
        } 
        view.setBackgroundResource(R.drawable.button_enabled); 
        Filter.floor_selected.add(value);} 
       filterFloorAdapter.notifyDataSetChanged(); 
      } 
     }); 



     seekbar = (RangeSeekBar)findViewById(R.id.range_seekbar); 
     seekbarValue = (TextView)findViewById(R.id.seekbar_value); 

     seekbar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener() { 
      @Override 
      public void onRangeSeekBarValuesChanged(RangeSeekBar bar, Object minValue, Object maxValue) { 
       if(String.valueOf(bar.getAbsoluteMaxValue()).equals(maxValue.toString())){ 

        if(String.valueOf(bar.getAbsoluteMinValue()).equals(minValue.toString())) 
         seekbarValue.setText("Бүх"); 
        else { 
         seekbarValue.setText(minValue.toString() + " $ - +"); 
        } 
       } else if(String.valueOf(bar.getAbsoluteMinValue()).equals(minValue.toString())){ 
        seekbarValue.setText(maxValue.toString() + " $ - -"); 
       } else{ 
        seekbarValue.setText(minValue.toString() + " $ - " + maxValue.toString() + " $"); 
       } 
      } 
     }); 
    } 
} 

und Filter-Knopf Adapter

public class FilterButtonAdapter extends BaseAdapter { 

    private Context context; 
    private final String[] filterValues; 
    private List<String> checkedFilterValues = new ArrayList<String>(); 


    public FilterButtonAdapter(Context context, String[] filterValues, List<String> checkedFilterValues){ 
     this.context = context; 
     this.filterValues = filterValues; 
     this.checkedFilterValues = checkedFilterValues; 
    } 
    @Override 
    public int getCount() { 
     return filterValues.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View gridView; 
     if(convertView == null){ 

      gridView = new View(context); 
      gridView = inflater.inflate(R.layout.layout_button, null); 

      final TextView textView = (TextView)gridView.findViewById(R.id.filter_button); 
      textView.setText(filterValues[position]); 

      boolean contain = false; 
      for(int i = 0; i < Filter.blocks_selected.size(); i++){ 
       if(filterValues[position].equals(checkedFilterValues.get(i))) 
       { 
        gridView.setBackgroundResource(R.drawable.button_enabled); 
        contain = true; 
        break; 
       } 
      } 
      if(!contain){ 
       gridView.setBackgroundResource(R.drawable.button_disabled); 
      } 
     } else gridView = (View)convertView; 
     return gridView; 
    } 
} 

Filterklasse:

public class Filter { 

    public static String price = "any"; 
    public static long priceMax = 0; 
    public static long priceMin = 0; 
    public static final String[] filter_blocks = new String[]{ 
      "any", "A", "B", "C" 
    }; 
    public static final String[] filter_floors = new String[]{ 
      "any", "1", "2", "3", "4", "5", "6", 
      "7", "8", "9", "10", "11", "12+" 
    }; 

    public static List<String> blocks_selected = new ArrayList<String>(){{ 
     add("any"); 
    } 
    }; 

    public static List<String> floor_selected = new ArrayList<String>(){{ 
     add("any"); 
    } 
    }; 

    public static int floor = 10; 

} 

My Android Studio Emulator 2.7 QVGA-API 25

+0

Make 'gridView.setNestedScrollingEnabled (false)' –

+0

erfordern Lollilop API –

+0

mein Projekt minSdkVersion 15 targetSdkVersion 26 –

Antwort

0

Versuchen Sie, diese

ViewCompat.setNestedScrollingEnabled(gridView, true); 
0

nicht GridView innen ScrollView Verwenden Sie, weil beide Scrolling-Funktionalität hat und aufgrund dieser wird es nicht richtig funktionieren.

Verwenden Sie NestedScrollView anstelle von ScrollView.

NestedScrollView ist wie ScrollView, aber es unterstützt sowohl als nested Scrollen parent und child auf den neuen und alten Versionen von Android handeln. Verschachteltes Scrollen ist standardmäßig aktiviert.

Siehe documentation.

Aktualisieren Sie Ihre Layout-Struktur wie folgt:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/layout_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      android:minHeight="?attr/actionBarSize" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark" 
      app:titleTextColor="@android:color/white" 
      app:contentInsetStartWithNavigation="0dp"> 
     </android.support.v7.widget.Toolbar> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     android:id="@+id/layout_scorll" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp"> 

       <TextView 
        android:text="Price" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:gravity="start|bottom" 
        android:textStyle="bold" 
        android:textColor="@color/colorPrimary" 
        android:layout_marginTop="20dp" /> 

       <TextView 
        android:id="@+id/seekbar_value" 
        android:text="Any" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center|bottom" 
        android:textStyle="bold"/> 

       <org.florescu.android.rangeseekbar.RangeSeekBar 
        android:id="@+id/range_seekbar" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        app:showLabels="false" 
        app:valuesAboveThumbs="false" 
        app:barHeight="5dp" 
        app:alwaysActive="true" 
        app:thumbDisabled="@drawable/seekbar_button" 
        app:textAboveThumbsColor="@color/colorPrimary" 
        app:defaultColor="@color/colorPrimary" 
        app:activeColor="@color/colorButton" /> 

       <TextView 
        android:text="Block" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:gravity="start|bottom" 
        android:textStyle="bold" 
        android:textColor="@color/colorPrimary" 
        android:layout_marginTop="20dp"/> 

       <GridView 
        android:id="@+id/gridViewBlock" 
        android:numColumns="auto_fit" 
        android:gravity="center" 
        android:columnWidth="60dp" 
        android:stretchMode="columnWidth" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:nestedScrollingEnabled="false"/> 

       <TextView 
        android:text="Floor" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:gravity="start|bottom" 
        android:textStyle="bold" 
        android:textColor="@color/colorPrimary" 
        android:layout_marginTop="20dp"/> 

       <!-- This Grid View is my problem --> 
       <GridView 
        android:id="@+id/gridViewFloor" 
        android:numColumns="auto_fit" 
        android:gravity="center" 
        android:columnWidth="60dp" 
        android:stretchMode="columnWidth" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:nestedScrollingEnabled="false"/> 

      </LinearLayout> 

      <Button 
       android:text="See result" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:textStyle="bold" 
       android:background="@color/colorAccent" 
       android:textColor="@android:color/white" /> 

     </RelativeLayout> 
    </android.support.v4.widget.NestedScrollView> 
</android.support.design.widget.CoordinatorLayout> 
+0

ist es? nicht einmal scrollen –

+0

JA. Versuchen Sie, das Attribut 'android: nestedScrollingEnabled =" false "' zu Ihren beiden 'GridView' hinzuzufügen. – FAT

+0

Aktivität scrollt nicht? –