2013-12-15 2 views
1

Я хочу добавить записи в свой GridView, начиная с вершины, но вместо этого первая запись зарегистрирована в левом нижнем углу. У меня есть еще один фрагмент кода в моем проекте, который добавляет записи в GridView, и код идентичен, и работает так, как я этого хочу. Я уверен, что это простое исправление, но я не могу понять, где проблема.Элементы GridView добавляются снизу вверх

ScreenShot

Вот мой макет код формы в картине

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<LinearLayout android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/ll1" 
    android:layout_above="@+id/ll2" 
    > 

    <GridView 
     android:id="@+id/gvObjects" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:numColumns="3" 
     android:horizontalSpacing="4dip" 
     android:gravity="center" 
     android:verticalSpacing="4dip" 
     android:padding="4dip" 
     android:stretchMode="columnWidth" > 

    </GridView> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/ll2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignTop="@+id/btnDownloadObjects" 
    android:orientation="vertical" > 

    </LinearLayout> 

<Button 
    android:id="@+id/btnDownloadObjects" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:text="Download Objects" 
    android:textSize="25sp" /> 

</RelativeLayout> 

Следующий фрагмент кода мой ImageView, который добавляется в GridView как запись

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ivObject" 
    android:layout_width="fill_parent" 
    android:layout_height="100dip" 
    android:adjustViewBounds="true" 
    android:contentDescription="@string/descr_image" 
    android:scaleType="centerInside" /> 

Следующий метод регистрирует ImageView в качестве адаптера для моего GridView

private void populateGridView(){ 
     GridView gv = (GridView) findViewById(R.id.gvObjects); 
     gv.setAdapter(new ImageAdapter()); 
     gv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      } 
     }); 
    } 

Наконец, вот мой ImageAdapter класс

public class ImageAdapter extends BaseAdapter{ 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      final ImageView imageView; 
      if (convertView == null) { 
       imageView = (ImageView) getLayoutInflater().inflate(R.layout.picture_list_object, parent, false); 
      } else { 
       imageView = (ImageView) convertView; 
      } 
      File picFile = new File(Global.hairFolder.get(position)); 
      Uri picUri = Uri.fromFile(picFile); 
      System.out.println(picUri.toString()); 
      imageLoader.displayImage(picUri.toString(), imageView, options); 
      return imageView; 

     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return Global.hairFolder.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 
    } 

} 

ответ

2

Если я правильно понял вашу проблему, это LinearLayout родителя вашего GridView:

<LinearLayout android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/ll1" 
    android:layout_above="@+id/ll2" 
    > 

wrap_content + layout_above сделать LinearLayout не принимать все доступное вертикальное пространство и расположение в нижней части.

Похоже, вы можете удалить ll1 всего и просто поместить GridView в родительский RelativeLayout. Если вы не укажете никаких специальных атрибутов позиционирования layout_..., они будут размещены в верхнем левом углу.

+0

О, ничего себе. я чувствую себя как A1 D-Bag. Все исправлено. Не могу поверить, что я так долго пытался понять это. Благодаря :) –

1

Это очень просто. У вас есть кнопка внизу. Затем у вас есть LinearLayout над ним, а над LinearLayout у вас есть еще один LinearLayout с GridView. Вы должны просто перемещать позицию макета ... Итак, выровняйте gridview сверху и вытащите его из бесполезного LinearLayout ...

1

С моим gridview, я сделал, android:layout_alignParentTop="true", и это сработало!

Смежные вопросы