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

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

Войти
Регистрация
Восстановить пароль
 
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
#1

Как привязать item к определенной Activity? - Android

09.11.2014, 19:17. Просмотров 437. Ответов 7
Метки нет (Все метки)

Здравствуйте!Имеется список категорий (items) в ListView.Как по нажатию на item под названием Cat1 открывалась ActivityCat1 и так далее?
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
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Category category_data[] = new Category[]
                {
                        new Category(R.drawable.cat1, "Cat1"),
                        new Category(R.drawable.cat2, "Cat2"),
                        new Category(R.drawable.cat3, "Cat3"),
                        new Category(R.drawable.cat4, "Cat4"),
                        new Category(R.drawable.cat5, "Cat5"),
                        new Category(R.drawable.cat6, "Cat6"),
                        new Category(R.drawable.cat7, "Cat7"),
                        new Category(R.drawable.cat8, "Cat8"),
                };
 
        CategoryAdapter adapter = new CategoryAdapter(this,
                R.layout.listview_item_row, category_data);
 
        listView1 = (ListView)findViewById(R.id.listView1);
 
        View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
        listView1.addHeaderView(header);
 
        listView1.setAdapter(adapter);
 
        }
P.S. Где-то наткнулся на такой код...сделал так,но тут идет переход со всех item'ов в одну и ту же активити.
Java
1
2
3
4
5
6
7
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> a, View v, int position, long id)
            {
                Intent intent=new Intent ( MainActivity.this , Cat1.class );
                startActivity(intent);
            }
        });
Кто может объяснить,как работает это строка?
Java
1
 public void onItemClick(AdapterView<?> a, View v, int position, long id)
Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
09.11.2014, 19:47     Как привязать item к определенной Activity? #2
1) google со словами start activity by name
2) в классе Category не строку передавать а Cat1.class и так далее, и хранить атм его, а при клике, брать из массива категорий категорию и брать из неё параметр этот


А Вы уверены что Вам нужны разные активити?
Там разный код? Нельзя объединить водно с параметром?
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
09.11.2014, 20:06  [ТС]     Как привязать item к определенной Activity? #3
DrobyshevAlex, Просто есть список категорий...и у каждого пункта этого списка есть своя Activity.Т.е по нажатию на Cat1 должна открыться Cat1Activity,а не Cat3Activity например.
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
09.11.2014, 20:18     Как привязать item к определенной Activity? #4
Ну это понятно.
Только не вижу ответа на вопрос, по поводу можно ил сделать общее активити? Обычно при смене категории меняется только контент, а основной код один.

А если вы хотите именно так, разные активити, то я дал вам два варианта решения
Могу ещё добавить.
3) создайте карту имя => Class
и при выборе итема, выбирайте из карты по имени, её класс, но улчше всё таки 2 вариант, хранить в объекте категории Класс активити.
new Category(R.drawable.cat1, Cat1Activity.class),

У вас же есть position - говорящий какой итем кликнули, значит легко из адаптера достать объект Категории и прочесть его парамтер

4) можно просто брать порядковый номер, и в case запускать нужный активити, ну или в гугле посмотреть как я писал в пункте 1 как запустить активити из строки.
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
09.11.2014, 20:28  [ТС]     Как привязать item к определенной Activity? #5
DrobyshevAlex, сделал,как вы сказали через position.Все работает...спасибо.
Java
1
2
3
4
5
6
7
8
9
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> a, View v, int position, long id)
            {
                if(position == 1)      {
                Intent intent=new Intent ( MainActivity.this , Cat1.class );
                startActivity(intent);
              }
            }
        });
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
09.11.2014, 20:30     Как привязать item к определенной Activity? #6
Ну я правда немного не то имел ввиду
если прописывать такое условие для всех пунктов, это дублирование кода большое
Kroshandowski
2 / 2 / 0
Регистрация: 05.04.2013
Сообщений: 234
09.11.2014, 20:32  [ТС]     Как привязать item к определенной Activity? #7
DrobyshevAlex, ну я пока еще учусь Приложенька для себя А дублирование кода это очень плохо?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2014, 20:49     Как привязать item к определенной Activity?
Еще ссылки по теме:

Android Где посмотреть пакеты Activity для определенной версии андроида?
Android Как обновить список RecyclerView после добавления item?
Как сделать такое activity? Android
Android RecyclerView создает Item на размер экрана, как исправить?
Как обратиться к элементу Drawer Activity? Android

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

Или воспользуйтесь поиском по форуму:
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
09.11.2014, 20:49     Как привязать item к определенной Activity? #8
Для того и придуманы функции что бы не было дублирования.

Ну класс Category вы сами описали?

В него добавьте просто параметр
Java
1
private Class mActivityClass;
и передавайте его в констррукторе
Java
1
2
3
4
public Category(...... , Class activityClass) {
    ...
    mActivityClass = activityClass;
}
Java
1
new Category(R.drawable.cat1, "Cat1", Cat1Activity.class),
сделайте в классе гетер
Java
1
2
3
public Class getActivityClass() {
    return mActivityClass;
}
и тащите его как то так навреное
Java
1
2
3
4
5
6
7
8
9
        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> a, View v, int position, long id)
            {
                Category cat = (Category)a.getAdapter().getItem(position);
                Intent intent=new Intent ( MainActivity.this , cat.getActivityClass());
                startActivity(intent);
              }
            }
        });
и тогда у вас на все категории будут только эти 3 строки для запуска активити
Yandex
Объявления
09.11.2014, 20:49     Как привязать item к определенной Activity?
Ответ Создать тему
Опции темы

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