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

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

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

Работа с фрагментами - Программирование Android

09.10.2015, 16:17. Просмотров 232. Ответов 2
Метки нет (Все метки)

Здравствуйте! Имеется активити
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
package com.example.des.farmer;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
 
import java.util.ArrayList;
import java.util.List;
 
public class OptimizedActivity extends AppCompatActivity {
    public static final String EXTRA_NAME = "optimized_name";
    
    private ViewPager mViewPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.optimized);
 
        Intent intent = getIntent();
        final String optimizedName = intent.getStringExtra(EXTRA_NAME);
 
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
       /* mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());*/
 
        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        if (mViewPager != null) {
            setupViewPager(mViewPager);
        }
       /* mViewPager.setAdapter(mSectionsPagerAdapter);*/
 
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
 
    }
 
    private void setupViewPager(ViewPager viewPager) {
        Adapter adapter = new Adapter(getSupportFragmentManager());
        adapter.addFragment(new TabMenStoimostActivity(), getString(R.string.menovayaStoimost));
        adapter.addFragment(new TabPerevodEnerdgyActivity(), getString(R.string.perevodEnerdgy));
        viewPager.setAdapter(adapter);
    }
 
 
    static class Adapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragments = new ArrayList<>();
        private final List<String> mFragmentTitles = new ArrayList<>();
 
        public Adapter(FragmentManager fm) {
            super(fm);
        }
 
        public void addFragment(Fragment fragment, String title) {
            mFragments.add(fragment);
            mFragmentTitles.add(title);
        }
 
        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }
 
        @Override
        public int getCount() {
            return mFragments.size();
        }
 
        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitles.get(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
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
package com.example.des.farmer;
 
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.RadioGroup;
 
public class TabPerevodEnerdgyActivity extends Fragment {
    private int selectedDgId;
    private int selectedKalId;
    private double otvet1;
    private double otvet2;
    private double otvet3;
    private double dg;
    private double kal;
    private EditText etKal;
    private EditText etDg;
    private EditText etKormEd;
    private TextInputLayout tilDg;
    private TextInputLayout tilKal;
    private TextInputLayout tilKormEd;
 
    public TabPerevodEnerdgyActivity() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView =  inflater.inflate(R.layout.content_tab_perevod_enerdgy, container, false);
 
        RadioGroup rgDg = (RadioGroup)rootView.findViewById(R.id.rgDg);
        tilDg = (TextInputLayout) rootView.findViewById(R.id.tilDg);
        etDg = (EditText) tilDg.findViewById(R.id.etDg); //Определяем тектовое поле для ввода значения ДЖ
 
        selectedDgId = rgDg.getCheckedRadioButtonId(); //временная переменная для хранения ID выбронной кнопки ДЖ
 
        RadioGroup rgKal = (RadioGroup)rootView.findViewById(R.id.rgKal);
        tilKal = (TextInputLayout) rootView.findViewById(R.id.tilKal);
        etKal = (EditText)tilKal.findViewById(R.id.etKal); //Определяем тектовое поле для ввода значения Калорий
 
        selectedKalId = rgKal.getCheckedRadioButtonId(); //временная переменная для хранения ID выбронной кнопки Калорий
 
        tilKormEd = (TextInputLayout) rootView.findViewById(R.id.tilKormEd);
        etKormEd = (EditText)tilKormEd.findViewById(R.id.etKormEd); //Определяем тектовое поле для ввода значения Кормовых единиц
 
 
        rgDg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
 
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
 
                if (TextUtils.isEmpty(etDg.getText())){
                    return;
                }
                final double resultDg = Double.parseDouble(etDg.getText().toString());//Парсим введенное значение в поле Дж
                switch (checkedId) {
 
                    case R.id.rbDg:
 
                        if (selectedDgId == R.id.rbMdg) {
                            etDg.setText("" + resultDg * 1000000);
                        } else if (selectedDgId == R.id.rbKdg) {
                            etDg.setText("" + resultDg * 1000);
                        }
                        break;
                    case R.id.rbKdg:
 
                        if (selectedDgId == R.id.rbMdg) {
                            etDg.setText("" + resultDg * 1000);
                        } else if (selectedDgId == R.id.rbDg) {
                            etDg.setText("" + resultDg / 1000);
                        }
                        break;
                    case R.id.rbMdg:
 
                        if (selectedDgId == R.id.rbDg) {
                            etDg.setText("" + resultDg / 1000000);
                        } else if (selectedDgId == R.id.rbKdg) {
                            etDg.setText("" + resultDg / 1000);
                        }
                        break;
                    default:
                        break;
                }
            }
        });
 
        rgKal.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
 
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                if (TextUtils.isEmpty(etKal.getText())){
                    return;
                }
                final double resultKal = Double.parseDouble(etKal.getText().toString());//Парсим введенное значение в поле Калорий
                switch (checkedId) {
                    case R.id.rbKal:
                        if (selectedKalId==R.id.rbKKal) {
                            etKal.setText("" + resultKal *1000);
                        }
                        break;
                    case R.id.rbKKal:
                        if (selectedKalId==R.id.rbKal){
                            etKal.setText(""+resultKal/1000);
                        }
                        break;
                    default:
                        break;
                }
            }
        });
 
        return rootView;
    }
 
}
Так вот у меня не получается во фрагменте сделать обработку событий кнопкам. Просто в активити все хорошо работает. Помогите понять как это делается во фрагменте

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
 public void onClearResult (View v){ // Очищаем ве поля
        etDg.setText(null);
        etKormEd.setText(null);
        etKal.setText(null);
        tilDg.setHint(getString(R.string.inputZnachenie));
        tilKal.setHint(getString(R.string.inputZnachenie));
        tilKormEd.setHint(getString(R.string.inputZnachenie));
 
    }
    public double Dgoul (double dg){
        if (selectedDgId==R.id.rbMdg){
            dg = otvet1;
        } else if (selectedDgId==R.id.rbKdg){
            dg = otvet1/1000;
        } else if (selectedDgId==R.id.rbDg){
            dg = otvet1/1000000;
        }
        return dg;
    }
    public double Kalori (double kal){
        if (selectedKalId==R.id.rbKKal){
            kal = otvet2;
        } else if (selectedKalId==R.id.rbKal){
            kal = otvet2/1000;
        }
        return kal;
    }
    public void onClickResult (View v) //Обрабатываем нажатие клавиши расчета
    {
        tilKal = (TextInputLayout) findViewById(R.id.tilKal);
        if (etDg.getText().length()==0 && etKal.getText().length()==0 && etKormEd.getText().length()==0){
        Toast.makeText(getApplicationContext(),"Я не знаю что считать! Введите значение в одно из полей!",Toast.LENGTH_LONG).show();
    }else
                if (etDg.getText().length()>0 && etKal.getText().length()==0 && etKormEd.getText().length()==0){
                    otvet1 = Double.parseDouble(etDg.getText().toString()); // Парсим зничение ДЖ
                    etKal.setText(""+ String.format("%.7f",Dgoul(dg)*238.8459));
                    etKormEd.setText(""+String.format("%.7f",Dgoul(dg)/5.9201352));
                    tilKal.setHint(getString(R.string.youResult));
                    tilKormEd.setHint(getString(R.string.youResult));
 
                }else if (etKal.getText().length()>0 && etDg.getText().length()==0 && etKormEd.getText().length()==0){
                    otvet2 = Double.parseDouble(etKal.getText().toString()); // Парсим значение Калорий
                    etDg.setText(""+String.format("%.7f",Kalori(kal)*0.0041868));
                    etKormEd.setText(""+String.format("%.7f",Kalori(kal)/1414));
                    tilDg.setHint(getString(R.string.youResult));
                    tilKormEd.setHint(getString(R.string.youResult));
 
                }else if (etKormEd.getText().length()>0 && etDg.getText().length()==0 && etKal.getText().length()==0){
                    otvet3 = Double.parseDouble(etKormEd.getText().toString()); // Парсим значение Кормовых единиц
                    etDg.setText(""+otvet3*5.9201352);
                    etKal.setText(""+otvet3*1414);
                    tilKal.setHint(getString(R.string.youResult));
                    tilDg.setHint(getString(R.string.youResult));
                }
 
    }
 
    public void onClickRadioSelectDg (View v)//Слушаем и записываем занчение ID кнопки в переменную (для ДЖ)
    {
        selectedDgId = v.getId();
 
    }
    public void onClickRadioSelectKal (View v)//Слушаем и записываем занчение ID кнопки в переменную (для Калорий)
    {
        selectedKalId = v.getId();
 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2015, 16:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с фрагментами (Программирование Android):

Работа с фрагментами - Программирование Android
У меня такая ситуация, есть фрагмент с фильтрами и фрагмент с товарами. Когда я нажимаю на кнопку фильтровать в фрагменте с фильтрами как...

Операции с фрагментами - Программирование Android
Если вызвать транзакцию remove для текущего фрагмента в контейнере. То вызовется ли у этого фрагмента метод onDestroy? Добавлено через...

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

Переход между фрагментами - Программирование Android
Здравствуйте. Подскажите, как из одного фрагмента перейти на другой по нажатию кнопки? Можно ли это реализовать через intent и...

Взимодействие между фрагментами - Программирование Android
Суть такова - имеется всего одна активность. Она содержит фрагмент, на котором расположены текстовые поля, а уже этот фрагмент содержит...

Ошибка при работе с фрагментами - Программирование Android
Soory if it's unapproprite here, but I do not know what to do. I have just finished my first lesson. Error inflating class fragment--this...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alex Ziko
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 33
09.10.2015, 17:56 #2
Во фрагменте надо явно сетить листенеры, инициализация листенеров через xml в параметре onClick работает только на уровне Activity. Поэтому если нужно обрабатывать какие-то события, то View во фрагменте нужно делать set необходимого листенера.

P.S. И не давайте названия фрагменту используя слово "Activity", моветон...
Dmitriy505
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 21
09.10.2015, 18:02  [ТС] #3
Цитата Сообщение от Alex Ziko Посмотреть сообщение
Во фрагменте надо явно сетить листенеры, инициализация листенеров через xml в параметре onClick работает только на уровне Activity. Поэтому если нужно обрабатывать какие-то события, то View во фрагменте нужно делать set необходимого листенера.
Спасибо. Попробую
Цитата Сообщение от Alex Ziko Посмотреть сообщение
P.S. И не давайте названия фрагменту используя слово "Activity", моветон...
Учту)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2015, 18:02
Привет! Вот еще темы с ответами:

Подвисает ViewPager с фрагментами внутри - Программирование Android
Собственно вот в чём соль. Есть ViewPager с фрагментами внутри, в каждом фрагменте есть изображение которое подгружается из ресурсов...

Сделать переключение между фрагментами - Программирование Android
Здравствуйте. Подскажите как сделать переключение между фрагментами. Есть 3 фрагмента. на которых размещены кнопки. Как через кнопки...

Ошибка с фрагментами при повороте устройства - Программирование Android
Здравствуйте! Имеется такой код activity: public class MainActivity extends ActionBarActivity { private int selectedDay = 0; ...

Activity в Portrait/Landscape Orientation с разными фрагментами - Программирование Android
Подскажите, как реализовать два разных фрагмента в Activity в Portrait/Landscape Orientation. Нужно, чтобы в Portrait загружался один...


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

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

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