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

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

Войти
Регистрация
Восстановить пароль
 
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
#1

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

14.11.2013, 12:09. Просмотров 1027. Ответов 6
Метки нет (Все метки)

Как такой массив взять из getResources
Java
1
private static final String[] CONTENT = new String[] { "Раз", "Два", "Три", "Четыре"};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2013, 12:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Взять массив из ресурсов (Программирование Android):

Получить массив из ресурсов - Программирование Android
String names = getResources().getStringArray(R.array.names); без этой строчки приложения запускается, с ней нет. еклипс красным не...

Массив ссылок на изображения из ресурсов - Программирование Android
Подскажите как сформировать массив ссылок на изображения из ресурсов проекта. Необходимо для чтения изображения схем и дальнейшего их...

Как добавить в ArrayList массив из ресурсов? - Программирование Android
Возможно ли добавить в ArrayList<String> array_list = new ArrayList<String>(); массив из ресурсов? или только array_list.add ?

Взять массив или отдельную строку - Программирование Android
"Взятие" данных из базы public String getData() { String columns = new String {KEY_ROWID, KEY_STRANA, KEY_OBLAST}; ...

Получить массив картинок с ресурсов проекта - C#
Есть множество картинок которые находятся в ресурсах проекта. Я могу получить доступ к ним : Property.Resources. + имя картинки Мне...

Как залить в массив сотню картинок из ресурсов с именами файлов 1, 2, 3 и т.д - C#
В ресурсах есть много изображений. У них у всех имена "e1", "e2" и так далее.. Возможно ли их залить в массив кодом? или придется...

6
Wenceslaus
Android Developer
130 / 130 / 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);
0
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];
        }
0
Wenceslaus
Android Developer
130 / 130 / 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];
        }
2
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) : "???";
    }
}
0
Wenceslaus
Android Developer
130 / 130 / 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) : "???";
    }
}
но такой подход оправдан в очень редких случаях.
1
Chernoff20
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 28
16.11.2013, 02:07  [ТС] #7
Как раз первый случай интересовал. Я думал будет сложнее
0
16.11.2013, 02:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2013, 02:07
Привет! Вот еще темы с ответами:

Как загрузить bin-файл из ресурсов, сразу в массив байт? - Delphi
Сколько не прочел тем из поисковиков, везде предлагается через файловый поток загружать файлы. Вобщем прога уже была почти написана, эти...

Как взять в массив данные из другого файла? - ExtJS
есть файл famil.txt в котором список из сотни строк задача взять его в массив используя только JS и HTML

Взять данные между разделителями и поместить в массив - C#
Есть строка string str_1 = &quot;&lt;td class=tdl&gt;213.85.92.10&lt;/td&gt;...&lt;td class=tdl&gt;213.63.18.4&lt;/td&gt;...&quot;; Как поместить в массив string arr_str =...

Взять одномерный массив из L элементов. Отсортировать его по возрастанию - VBA
Взять одномерный массив из L элементов. Отсортировать его по возрастанию. Вывести результирующий массив под исходным. L = 30.


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

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

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