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

Взять массив из ресурсов - Android

Восстановить пароль Регистрация
 
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
14.11.2013, 12:09     Взять массив из ресурсов #1
Как такой массив взять из getResources
Java
1
private static final String[] CONTENT = new String[] { "Раз", "Два", "Три", "Четыре"};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
14.11.2013, 12:30     Взять массив из ресурсов #2
Chernoff20, из офф доки:
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>
Java
1
2
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
14.11.2013, 15:02  [ТС]     Взять массив из ресурсов #3
Знаю такое, пробовал. Вылетает с ошибкой про нулл.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class TestFragmentAdapter extends FragmentPagerAdapter {        
        private int mCount = CONTENT.length;                           // в этой строке падает
 
        public TestFragmentAdapter(FragmentManager fm) {
            super(fm);
        }
 
        @Override
        public Fragment getItem(int position) {
            return TestFragment.newInstance(String.valueOf(position)); 
        }
 
        @Override
        public int getCount() {
            return mCount;
        }
        
        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position];
        }
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
14.11.2013, 18:09     Взять массив из ресурсов #4
Chernoff20, а знаете ли вы, что в вашем случае ресурсы загружаются после создания TestFragmentAdapter'а? Соответственно в момент инициализации адаптера CONTENT еще не содержит массива. Что бы этого избежать, загружайте ресурсы до вызова адаптера, а в его конструктор добавьте загруженный массив:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class TestFragmentAdapter extends FragmentPagerAdapter {        
        private String[] content;
 
        public TestFragmentAdapter(FragmentManager fm, String[] content) {
            super(fm);
            this.content = content;
        }
 
        @Override
        public Fragment getItem(int position) {
            return TestFragment.newInstance(String.valueOf(position)); 
        }
 
        @Override
        public int getCount() {
            return content.length;
        }
        
        @Override
        public CharSequence getPageTitle(int position) {
            return content[position];
        }
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
15.11.2013, 01:54  [ТС]     Взять массив из ресурсов #5
А не подскажете как в таком адаптере сделать, чтобы загружалось например 3 фрагмента, и каждому фрагменту прикрепить свой layout. Как свой layout прикрутить в фрагмент знаю, а вот как обработать выбор между ними. Вот полный код
Кликните здесь для просмотра всего текста
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
public class VpiAbsTestActivity extends SherlockFragmentActivity {
    
    String[] CONTENT;
    
    TestFragmentAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;
    ActionBar mActionBar;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.simple_tabs);
        
        mActionBar = getSupportActionBar();
        mActionBar.setDisplayHomeAsUpEnabled(true);
        
        CONTENT = getResources().getStringArray(R.array.array_of_names_viewpager);
 
        mAdapter = new TestFragmentAdapter(getSupportFragmentManager(), CONTENT);
        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);
 
        mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
 
    }
    
    class TestFragmentAdapter extends FragmentPagerAdapter {        
        private String[] content; 
 
        public TestFragmentAdapter(FragmentManager fm, String[] content) {
            super(fm);
            this.content = content;
        }
 
        @Override
        public Fragment getItem(int position) {
            return TestFragment.newInstance(String.valueOf(position)); 
        }
 
        @Override
        public int getCount() {
            return content.length;
        }
        
        @Override
        public CharSequence getPageTitle(int position) {
            return content[position];
        }
    }
 
}


и полный код Тест
Кликните здесь для просмотра всего текста
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
public class TestFragment extends SherlockFragment {
    private String mContent = "???";
    private static final String KEY_TAB_NUM = "key.tab.num";
    
    public static TestFragment newInstance(String text) {
        TestFragment fragment = new TestFragment();
        
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putString(KEY_TAB_NUM, text);
        fragment.setArguments(args);
 
        
        return fragment;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, null);
        String text = getString(R.string.tab_page_num) + mContent;
        
        ((TextView)view.findViewById(R.id.text)).setText(text);
        
        return view;
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContent =  getArguments() != null ? getArguments().getString(KEY_TAB_NUM) : "???";
    }
}
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
15.11.2013, 14:05     Взять массив из ресурсов #6
Chernoff20, если я вас правильно понял, то лучше для каждого отдельного layout'а создавать отдельный класс Fragment. А подставлять так:
Java
1
2
3
4
5
6
7
8
9
10
@Override
public Fragment getItem(int position) {
    switch (position) {
    case 0:
        return TestFragment1.newInstance();
    case 1:
        return TestFragment2.newInstance();
    case 2:
        return TestFragment3.newInstance();       
}
если-таки использовать один класс, то layout'ы должны содержать одинаковые элементы (можно разных стилей) и выглядит это примерно так:
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
public class TestFragment extends SherlockFragment {
    private String mContent = "???";
    private static final String KEY_TAB_NUM = "key.tab.num";
    private int layout;
    
    public static TestFragment newInstance(String text) {
        TestFragment fragment = new TestFragment();
        
        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putString(KEY_TAB_NUM, text);
        fragment.setArguments(args);
 
        switch (text) {
        case "0":
            layout = R.layout.fragment1;
            break;
        case "1":
            layout = R.layout.fragment2;
            break;
        case "2":
            layout = R.layout.fragment3;
            break;
        }
        
        return fragment;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(layout, null);
        String text = getString(R.string.tab_page_num) + mContent;
        
        ((TextView)view.findViewById(R.id.text)).setText(text);
        
        return view;
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContent =  getArguments() != null ? getArguments().getString(KEY_TAB_NUM) : "???";
    }
}
но такой подход оправдан в очень редких случаях.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2013, 02:07     Взять массив из ресурсов
Еще ссылки по теме:

Использование стандартных ресурсов Android
Android Использование ресурсов в jar
Android Перебор id ресурсов в цикле
Массив ссылок на изображения из ресурсов Android
Android Установка ресурсов от строки

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

Или воспользуйтесь поиском по форуму:
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
16.11.2013, 02:07  [ТС]     Взять массив из ресурсов #7
Как раз первый случай интересовал. Я думал будет сложнее
Yandex
Объявления
16.11.2013, 02:07     Взять массив из ресурсов
Ответ Создать тему
Опции темы

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