Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
GiGaBiTe911
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
#1

Адаптер для GridView - Программирование Android

21.08.2013, 14:26. Просмотров 859. Ответов 1
Метки нет (Все метки)

Доброго времени. пытаюсь реализовать адаптер для GridView но почемуто не совсем получается. Суть вот в чем. я создал свой компонент:
код View:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
 
    <LinearLayout
        android:layout_width="280dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
 
        <TextView
            android:id="@+id/tvCameraName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/camera_name"
            android:textAppearance="?android:attr/textAppearanceMedium" />
 
        <ImageButton
            android:id="@+id/imbEditImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="TODO"
            android:src="@android:drawable/ic_menu_edit" />
 
        <ImageButton
            android:id="@+id/imbTakeScreen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="TODO"
            android:src="@android:drawable/ic_menu_camera" />
 
        <ImageButton
            android:id="@+id/imbEditCamera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="TODO"
            android:src="@android:drawable/ic_menu_manage" />
 
    </LinearLayout>
 
    <ImageView
        android:id="@+id/imgCamera"
        android:layout_width="280dp"
        android:layout_height="200dp"
        android:contentDescription="TODO"
        android:src="@drawable/camera_empty_frame_1" />
 
</LinearLayout>
и код класса (ввесь код реализации внетренней функциональности не привожу т.к. это здесь неимеет значения):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class CameraFrame extends LinearLayout
{
    private Context m_context;
    private Activity m_activity;
    private ImageView m_imgCamera;
    private TextView m_tvCameraName;
    private ImageButton m_imbEditImage;
    private ImageButton m_imbTakeScreen;
    private ImageButton m_imbEditCamera;
    private String m_CameraName="";
    private HiCamera m_Hicamera;
 
    public CameraFrame(Context context, Activity activity) 
    {
        super(context);     
        initComponent();
        m_context = context;
        m_activity = activity;
    }
    
    public CameraFrame(Context context) 
    {
        super(context);
        initComponent();
        m_context = context;
    }
 
    private void initComponent()
    {
           }
}
ну и сам код адаптера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class CameraGridAdapter extends BaseAdapter
{
    Context cntx;
    Activity act;
    LayoutInflater lInflater;
    ArrayList<CameraFrame> mCameras;
 
    
    public CameraGridAdapter(Context context, Activity activity, ArrayList<CameraFrame> cameras) 
    {
        cntx = context;
        act = activity;
        mCameras= cameras;
        lInflater = (LayoutInflater) cntx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() 
    {
        return mCameras.size();
    }
 
    @Override
    public Object getItem(int position) 
    {
        return mCameras.get(position);
    }
 
    @Override
    public long getItemId(int position) 
    {
        return mCameras.get(position).getId();
    }
 
    @Override
    public View getView(int position, View camView, ViewGroup parent) 
    {
        // Вариант 1
        CameraFrame mCameraFrame = null;
        // Вариант 2
        //CameraFrame mCameraFrame = (CameraFrame) camView;
        if(camView == null)
        {
            // Вариант 1
            mCameraFrame= new CameraFrame(cntx, act);           
            // Вариант 2
            //mCameraFrame = (CameraFrame) lInflater.inflate(R.layout.camera_frame, parent, false);
            
            mCameraFrame.setLayoutParams(new GridView.LayoutParams(85, 85));            
            mCameraFrame.setPadding(8, 8, 8, 8);
        }
        else
        {
            mCameraFrame = (CameraFrame) camView;
        }
        
        mCameraFrame.setCameraName("Камера" + position);        
                
        return  mCameraFrame;
    }
    
    CameraFrame getCameraFrame(int position)
    {
        return (CameraFrame) getItem(position);
    }
 
}
и так, в чем суть проблеммы. первый вариант работает, но я передаю коллекцию из 20 элементов, но метод getView отрабатывает только 8 раз и визуально ничего не отображается. а второй вариант вообще вылетает на строчке:
Java
1
mCameraFrame = (CameraFrame) lInflater.inflate(R.layout.camera_frame, parent, false);
"мотивируя" это тем, что не может привести тип CameraFrame к типу LinearLayout.
ах да, чуть не забыл... вот так сознаю и назначаю адаптер в onClick:
Java
1
2
3
4
 camGridAdapter = new CameraGridAdapter(getApplicationContext(), thisActivity, MyCameras); 
                
                GridView gridview = (GridView) findViewById(R.id.gvCameras);                
                gridview.setAdapter(camGridAdapter);
при написании всего этого руководствовался вот этой статьей, т.к. мне нужна именно такая функциональность (чтобы элементы сами адаптировались в сетке )
подскажите плиз, в чем ошибка и как исправить?

Добавлено через 17 минут
пардонте, но я уже и сам разобрался )))
ошибка была вот здесь:
Java
1
 GridView gridview = (GridView) findViewById(R.id.gvCameras);
я GridView не оттуда брал, нужно вот так:
Java
1
GridView gridview = (GridView) m_tabVideo.findViewById(R.id.gvCameras);
а в остальном адаптер работает прекрасно. Хотя есть одно "НО" при повороте девайса все исчезает. что нужно сделать чтобы оно обратно отобразилось а так же что делать при добавлении новых элементов в массив, как обновить адаптер? я гдето видел что у адаптера есть чтото типа "refresh" метод.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 14:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Адаптер для GridView (Программирование Android):

GridView адаптер временная картинка при скролле - Программирование Android
Есть активити для выбора нескольких картинок. В GridView загружаются миниатюры из галереи Когда картинок много то при быстром скролле...

Как создать адаптер для Gallery? - Программирование Android
Доброго вечера всем! Имеется List &lt;String&gt; files_adress;, содержащий адреса картинок, как создать адаптер для Gallery, который будет...

Адаптер для списка сообщений мессенджера - Программирование Android
Всем привет. Может конечно вопрос и тупой, но я не могу с ним уже месяц справится. Короче хочу создать чат(или меснджер, называйте как...

Какой адаптер нужен для кастомного ExpandableListView - Программирование Android
Доброго дня. Мне нужно отобразить данные в виде сворачивающегося списка. Нашёл подходящий ListView для этого - ExpandableListView. Но...

Как правильно построить адаптер для показа данных из базы в ListView - Программирование Android
Всем привет. На данный момент все данные в программе хранятся в классе, есть адаптер для отображения данных в ListView: ArtsAdapter...

Адаптер - Программирование Android
как добавлять данные в адаптер числовые и строковые значение мой код не правильный))) final ListView lv =...

1
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
21.08.2013, 21:14 #2
Цитата Сообщение от GiGaBiTe911 Посмотреть сообщение
я гдето видел что у адаптера есть чтото типа "refresh" метод.
adapter.notifyDataSetChanged();
Цитата Сообщение от GiGaBiTe911 Посмотреть сообщение
при повороте девайса все исчезает.
можно просто отключить пересоздание активити прописав для него в манифесте
XML
1
android:configChanges="keyboardHidden|orientation|screenSize"
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2013, 21:14
Привет! Вот еще темы с ответами:

GridView - Программирование Android
Здравствуйте, подскажите где посмотреть пример для прокрутки грида в горизонтальном направлении, если не умещается все ячейки на экран. И...

Адаптер и ListView - Программирование Android
Решил написать свой адаптер, работающий с listView. Беда в том, что программа вылетает сразу же. Вот код MainActivity: package...

Picaso и адаптер - Программирование Android
Доброго времени суток, ребята помогите весь день писал все нормально было, но под вечер что то я начал здавать, в общем у меня выводится...

GridView и ViewPager - Программирование Android
Всем привет. У меня есть GridView, в котором можно, конечно же, тыкать на пункты списка и открывать новую активити: например,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru