2016-07-31 3 views
0

Я хотел бы создать динамическую gridview programmaticaly. Все выглядит хорошо. Но маржа для каждой ячейки не отображается. Пожалуйста помоги.Создайте GridView с пометкой для каждой ячейки программно

PagerAdapter:

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    Calendar viewData = getData(position); 
    GridView gridView = new GridView(mContext); 
    gridView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT)); 
    gridAdapter = new GridAdapter(mContext, viewData); 
    gridView.setNumColumns(4); 
    gridView.setAdapter(gridAdapter); 
    container.addView(view); 
    return gridView; 
} 

GridAdapter

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false); 
    layout.setLayoutParams(new GridView.LayoutParams(2, 2)); 
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name); 
    lblDisplay.setText(getDisplayText(position)); 

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){ 
     layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell)); 
    } 
    return layout; 
} 

И мой cal_single_cell.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:theme="@style/CalendarSingleCell"> 

    <TextView 
     android:id="@+id/lbl_cell_name" 
     android:text="Jan" 
     android:textSize="18dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="64dp" 
     android:gravity="center" /> 

</LinearLayout> 

view display result on google drive

+0

Привет @NguyenDang, я ответил на вашу проблему, но ответа нет, нет информации, что мой ответ помог вам или нет. Если мой ответ поможет, пожалуйста, установите правильный ответ. Благодарю. –

+0

Hi Maciej Sikora, он все еще не работает для меня, когда я говорю: ViewGroup layout = (ViewGroup) inflater.inflate (R.layout.cal_single_cell, parent, false); layout.setLayoutParams (новый GridView.LayoutParams (2, 2)); У меня есть белая страница. И я вижу, что ViewHolder действительно хорош для производительности. Спасибо. –

+0

Вставить Ваш текущий код, я помогу вам, я вижу в комментарии, что вы делаете это все время неправильно. –

ответ

0

Я думаю, что Ваш главный туман ake - это то, что вы хотите изменить маркер ячейки и вместо этого изменить маржу GridView.

Использование GridView атрибуты андроида: horizontalSpacing, андроида: verticalSpacing. Дополнительная информация в этом вопросе - Increase the grid spacing in android

Или изменить поле, отложить вид внутри вида строки (вид соты). Programically в Адаптеры GetView метод сделать что-то вроде этого:

view.setLayoutParams(/* your layout params */); //where view is cell view 

в вас код:

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

    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false); 

    //**************************** 
    //here set padding or margin 

    layout.setLayoutParams(/* your layout params */); 

    //*************************** 
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name); 
    lblDisplay.setText(getDisplayText(position)); 

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){ 
     layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell)); 
    } 
    return layout; 
} 

ВАЖНО

Изменение параметров макета в каждом GetView очень не является оптимальным, если должен сделать это, а затем создать ViewHolder.

+0

Привет @Maciej Sikora, Спасибо за вашу поддержку Я просто добавляю GridView.LayoutParams в каждую ячейку моего GridView в моем обновленном сообщении. И я надеюсь, что вам будет достаточно информации. Большое спасибо. –

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