2014-11-27 3 views
0

Я пытаюсь создать пользовательский элемент управления GridView внутри фрагмента, который должен выглядеть примерно так:Пользовательские Gridview в фрагменте не заселять

http://imgur.com/6fEFYTN

Так что я создал FragmentLayout, который содержит изображение и метку:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 

    <ImageView 
    android:id="@+id/grid_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    /> 

    <TextView 
     android:id="@+id/grid_label" 
     android:layout_width="fill_parent" 
     android:layout_height="45dp" 
     android:layout_marginTop="175dp"  
     android:background="@drawable/label" 
     android:gravity="center" 
     android:textColor="#FFFFFF" 
     android:textSize="12sp" 
     android:textStyle="bold" /> 

адаптер, который управляет FragmentLayout выглядит следующим образом:

public class CustomGridAdapter extends BaseAdapter{ 

private Context mContext; 
private final String[] label; 
private final int[] imgId; 
    public CustomGridAdapter(Context c,String[] label,int[] imgId) { 
     mContext = c; 
     this.imgId = imgId; 
     this.label = label; 
    } 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@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 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    View grid; 
     LayoutInflater inflater = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (convertView == null) { 
      grid = new View(mContext); 
     grid = inflater.inflate(R.layout.image_button_layout, null); 
      TextView textView = (TextView) grid.findViewById(R.id.grid_label); 
      ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image); 
      textView.setText(label[position]); 
      imageView.setImageResource(imgId[position]); 
      } else { 
      grid = (View) convertView; 
      } 
     return grid; 
} 

}

фрагмент сетки выглядит следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 

<GridView 
    android:numColumns="auto_fit" 
    android:gravity="center" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/form_grid" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    /> 

</LinearLayout> 

Я создаю это от метода onCreateView, я использую onclickListener так образы работают как кнопки и отображать тост при нажатии:

@Override 
public View onCreateView(final LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_layout_softdrinks, container, false); 

    GridView grid = (GridView) rootView.findViewById(R.id.form_grid); 

    CustomGridAdapter adapter = new CustomGridAdapter(rootView.getContext(), label, imgId); //label and imgId are arrays containing strings and int respectively 

    grid.setAdapter(adapter); 

    grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Toast.makeText(inflater.getContext(), "You Clicked at " +label[+ position], Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return rootView;   
} 

проблема заключается в том, что когда я запускаю код, экран пуст, поэтому GridView не заселяется , Любые советы по этому вопросу?

+0

где вы определяете массив Стиннов и Интов, соответственно – Jorgesys

+0

Я определил их перед onCreateClass –

ответ

1

Прежде всего вам необходимо предоставить полезную нагрузку в массиве imgId и массиве меток.

Тогда ваш вид сетки не будет раздуваться, потому что вы возвращаете 0 в свой метод getCount!

Чтобы раздуть макет заменить в методе GetCount

Return 0; 

С

Return imgId.length; 

Метод GetCount говорит базовый блок, сколько изображений или строки (.. данные) у вас есть в вашем массиве которые вы хотите раздуть в виде сетки. Если вы возвращаете 0, базовый адаптер думает, что есть 0 данных для раздувания.

+0

Спасибо! что это решило! –

+0

@ Victor Gallo добро пожаловать! :) – Mike

+0

кто-то снова завидует мне. Я лучше его/нее. Мне нравится это ;) – Mike

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