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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.57
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 101
#1

Передача данных из Activity в Fragment - Программирование Android

10.12.2014, 14:36. Просмотров 2509. Ответов 4
Метки нет (Все метки)

Есть основной класс (puplic class ViewContact) в котором есть фрагменты (public static class MainFragment extends Fragment), есть база контактов, ID строки выбранного контакта приходит в ViewContact, а отобразиться данные должны в фрагменте MainFragment, но ошибка в том, что фрагмент static... вообщем ошибка такая "Cannot make a static reference to the non-static field hightTextView" со всеми TextView'ами в фрагменте... Как решить проблему?

Кликните здесь для просмотра всего текста
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
public class ViewContact extends Activity {
    
    FrameLayout container;
    FragmentManager myFragmentManager;
    MainFragment Main;
    LightFragment Light;
    RegimeFragment Regime;
    final static String TAG_1 = "FRAGMENT_1";
    final static String TAG_2 = "FRAGMENT_2";
    final static String TAG_3 = "FRAGMENT_3";
    final static String KEY_MSG_1 = "FRAGMENT1_MSG";
    final static String KEY_MSG_2 = "FRAGMENT2_MSG";
    final static String KEY_MSG_3 = "FRAGMENT3_MSG";
    
        private long rowID; // ключ для передачи в другую активность
        private TextView nameTextView; 
        
        private TextView lenghtTextView; // номер телефона контакта
        private TextView weightTextView; // email 
        private TextView hightTextView; // 
        private TextView volumeTextView; //
        private TextView dateTextView;
        
        private TextView lightTextView;
        private TextView doplightTextView;
        
        private TextView fishTextView;
        private TextView plantTextView;
        
        private TextView temperatureTextView;
        private TextView acidTextView;
        private TextView hardnessTextView;
        
        private TextView photodirTextView;
        
        String photodir;
        String myJpgPath;
        
        private ImageView AqImage;
        protected Context context;
 
    // класс для первого фрагмента
    public static class MainFragment extends Fragment {
 
        TextView textMsg;
        
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.view_contact, null);
            textMsg = (TextView) view.findViewById(R.id.tvMessage);
            
        Bundle bundle = getArguments();
        if (bundle != null) {
            String msg = bundle.getString(KEY_MSG_1);
            if (msg != null) {
                textMsg.setText(msg);
            }
        }
        return view;
    }
 
    public void setMsg(String msg) {
        textMsg.setText(msg);
    }
        
        private class HelloWebViewClient extends WebViewClient 
        {
            public boolean shouldOverrideUrlLoading(WebView view, String url) 
            {
                view.loadUrl(url);
                return true;
            }
        }
     // использование объекта типа Cursor, возвращаемого методом
            // doInBackground
            protected void onPostExecute(Cursor result) {
                super.onPostExecute(result);
 
                result.moveToFirst(); // перемещение к первому элементу
 
                // получение индекса столбца для каждого элемента данных
                int nameIndex = result.getColumnIndex("name");
                
                int lenghtIndex = result.getColumnIndex("lenght");
                int weightIndex = result.getColumnIndex("weight");
                int hightIndex = result.getColumnIndex("hight");
                int volumeIndex = result.getColumnIndex("volume");
                int dateIndex = result.getColumnIndex("date");
                
                int lightIndex = result.getColumnIndex("light");
                int doplightIndex = result.getColumnIndex("doplight");
                
                int fishIndex = result.getColumnIndex("fish");
                int plantIndex = result.getColumnIndex("plant");
                
                int temperatureIndex = result.getColumnIndex("temperature");
                int acidIndex = result.getColumnIndex("acid");
                int hardnessIndex = result.getColumnIndex("hardness");
                int photodirIndex = result.getColumnIndex("photodir");
 
                // заполнение компонентов TextViews выбранными данными
                nameTextView.setText(result.getString(nameIndex));
                
                lenghtTextView.setText(result.getString(lenghtIndex));
                weightTextView.setText(result.getString(weightIndex));
                hightTextView.setText(result.getString(hightIndex));
                volumeTextView.setText(result.getString(volumeIndex));
                dateTextView.setText(result.getString(dateIndex));
                
                lightTextView.setText(result.getString(lightIndex));
                doplightTextView.setText(result.getString(doplightIndex));
                
                fishTextView.setText(result.getString(fishIndex));
                plantTextView.setText(result.getString(plantIndex));
                
                temperatureTextView.setText(result.getString(temperatureIndex));
                acidTextView.setText(result.getString(acidIndex));
                hardnessTextView.setText(result.getString(hardnessIndex));
                
                ....................
 
                result.close(); // закрытие курсора результата
                databaseConnector.close(); // закрытие подключения к базе данных
                }
            
    }
    // класс для второго фрагмента
    
    .........................
    
    // класс для третьего фрагмента
    public static class RegimeFragment extends Fragment {
 
        ...............................
 
    // метод основной активности
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bar);
 
        container = (FrameLayout) findViewById(R.id.container);
 
        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);
        Button button3 = (Button) findViewById(R.id.button3);
        
        button1.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
 
                LightFragment fragment = (LightFragment) myFragmentManager.findFragmentByTag(TAG_1);
 
                if (fragment == null) {
 
                    Bundle bundle = new Bundle();
                    bundle.putString(KEY_MSG_1, "Последние новости");
                    Main.setArguments(bundle);
 
                    FragmentTransaction fragmentTransaction = myFragmentManager
                            .beginTransaction();
                    fragmentTransaction.replace(R.id.container, Main,
                            TAG_1);
                    fragmentTransaction.commit();
 
                } else {
                    fragment.setMsg("Вы уже на вкладке последние новости");
                }
            }
        });
 
        button2.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
 
                ..................
        });
 
        button3.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View arg0) {
 
                .................................
 
        myFragmentManager = getFragmentManager();
        Main = new MainFragment();
        Light = new LightFragment();
        Regime = new RegimeFragment();
 
        if (savedInstanceState == null) {
            // при первом запуске программы
            FragmentTransaction fragmentTransaction = myFragmentManager
                    .beginTransaction();
            // добавляем в контейнер при помощи метода add()
            fragmentTransaction.add(R.id.container, Main, TAG_1);
            fragmentTransaction.commit();
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
 
        // создание нового класса LoadContactTask и вызов его
        new LoadContactTask().execute(rowID);
    }
 
    // выполняет запрос к базе данных за пределами потока GUI
    private class LoadContactTask extends AsyncTask<Long, Object, Cursor> {
        DatabaseConnector databaseConnector = new DatabaseConnector(
                ViewContact .this);
 
        // выполнение доступа к базе данных
        @Override
        protected Cursor doInBackground(Long... params) {
            databaseConnector.open();
 
            // получение курсора, содержащего все данные выбранной записи
            return databaseConnector.getOneAquarium(params[0]);
        }
 
        // использование объекта типа Cursor, возвращаемого методом
        // doInBackground
        @Override
        protected void onPostExecute(Cursor result) {
            super.onPostExecute(result);
 
            result.moveToFirst(); // перемещение к первому элементу
 
            // получение индекса столбца для каждого элемента данных
            int nameIndex = result.getColumnIndex("name");
            
            int lenghtIndex = result.getColumnIndex("lenght");
            int weightIndex = result.getColumnIndex("weight");
            int hightIndex = result.getColumnIndex("hight");
            int volumeIndex = result.getColumnIndex("volume");
            int dateIndex = result.getColumnIndex("date");
            
            int lightIndex = result.getColumnIndex("light");
            int doplightIndex = result.getColumnIndex("doplight");
            
            int fishIndex = result.getColumnIndex("fish");
            int plantIndex = result.getColumnIndex("plant");
            
            int temperatureIndex = result.getColumnIndex("temperature");
            int acidIndex = result.getColumnIndex("acid");
            int hardnessIndex = result.getColumnIndex("hardness");
            int photodirIndex = result.getColumnIndex("photodir");
 
            // заполнение компонентов TextViews выбранными данными
            nameTextView.setText(result.getString(nameIndex));
            
            lenghtTextView.setText(result.getString(lenghtIndex));
            weightTextView.setText(result.getString(weightIndex));
            hightTextView.setText(result.getString(hightIndex));
            volumeTextView.setText(result.getString(volumeIndex));
            dateTextView.setText(result.getString(dateIndex));
            
            lightTextView.setText(result.getString(lightIndex));
            doplightTextView.setText(result.getString(doplightIndex));
            
            fishTextView.setText(result.getString(fishIndex));
            plantTextView.setText(result.getString(plantIndex));
            
            temperatureTextView.setText(result.getString(temperatureIndex));
            acidTextView.setText(result.getString(acidIndex));
            hardnessTextView.setText(result.getString(hardnessIndex));
            
            photodir = String.valueOf(photodirIndex);
            
            myJpgPath = result.getString(photodirIndex); //путь к картинке. У вас будет свой
            
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 2;
            Bitmap bm = BitmapFactory.decodeFile(myJpgPath, options);
            AqImage.setImageBitmap(bm);
            
            photodirTextView.setText(result.getString(photodirIndex));
 
            result.close(); // закрытие курсора результата
            databaseConnector.close(); // закрытие подключения к базе данных
        }
        
    }
       ....................
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2014, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача данных из Activity в Fragment (Программирование Android):

Передача параметров с Activity в Fragment - Программирование Android
Здравствуйте! У меня не получается передать параметры с Activity в Fragment. Я пытался сделать это следующим образом: В Activity: ...

Принятие данных из Activity в Fragment - Программирование Android
Здравствуйте, Дело вот как обстоит, мне нужно приянять один стринг параметр в фрагменте для дальнейшей обработки. Пытался таким...

Android - Передача данных с одного Activity на другое Activity - Программирование Android
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Fragment не отображается на Activity - Программирование Android
Здравствуйте! Помогите, пожалуйста, разобраться. Суть такая: пользователь проходит упражнение по переводу слова на другой язык, т.е....

Fragment вместо Activity - Программирование Android
Использую фрагмент вместо Activity. Но теперь методы не запускаются с фрагментов. Как можно полностью реализовать во фрагменте всё то, что...

Callbeck from Activity to Fragment - Программирование Android
При нажатии кнопки в активити должен отрабатывал метод в фрагменте (допустим обновляться вюшка). Как реализовать калбек от активити к...

4
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
10.12.2014, 21:03 #2
mcGurov, я не первый день работаю с фрагментами, съел на них собаку, но такого подхода ещё не видел.
При отсутствии серьёзной необходимости рекомендую все фрагменты выносить в отдельные классы. Это же касается и DialogFragment, если в будущем будете их где-то использовать.
Так что смело создавайте на каждый фрагмент по отдельному классу. Уберите static, зачем он там? Фрагменты не могут быть статическими, у них есть свой жизненный цикл. Вообще, почитайте побольше про фрагменты на разных сайтах.
Данные между активностью и фрагментом передаются, как правило, через параметры конструктора newInstance.
1
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 101
11.12.2014, 17:52  [ТС] #3
CoolMind, я понимаю, что намудрил, просто не могу дотумкать, как сделать одну активность и несколько лэйаутов чтобы они переключались... Вообщем логика в одном классе, а отображаемая информация на нескольких экранах...

Добавлено через 2 часа 23 минуты
CoolMind, если я создам на каждый фрагмент по отдельному классу, то ведь ID строки выбранного контакта, будет всё-равно приходить в основную активность и как его (ID) передать фрагментам для отображения данных?
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
11.12.2014, 18:08 #4
можно передавать данные через объект бандл
Java
1
2
3
4
Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
получать в onCreate() фрагмента
Java
1
2
Bundle bundle = getArguments();
int myInt = bundle.getInt(key, defaultValue);
1
mcGurov
3 / 3 / 0
Регистрация: 30.07.2013
Сообщений: 101
11.12.2014, 18:48  [ТС] #5
Gabberr, спасибо, попробую...
0
11.12.2014, 18:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2014, 18:48
Привет! Вот еще темы с ответами:

Использование Fragment в Activity - Программирование Android
Здравствуйте, делаю модуль для регистрации юзера, она прозодит в несколько этапов, сначала вводится номер, потом личные данные, потом...

Переход из Fragment в Activity - Программирование Android
как реализовать переход из Fragment В activity в фрагменте кнопка при нажатии которой происходит переход в активити

Переход между fragment и activity - Программирование Android
Доброй ночи) возникла необходимость обратного перехода от активити во фрагмент, при этом ничего обратно передать не надо. То есть...

Передача данных в другую Activity - Программирование Android
добрый день, подскажите пожалуйста, в одном активити я получаю значение от пользователя в editText, и мне это значение нужно передать в...


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

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

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