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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
#1

Обработка физической кнопки в фрагменте - Программирование Android

24.01.2014, 12:14. Просмотров 2796. Ответов 10
Метки нет (Все метки)

День добрый!
Столкнулся с такой проблемой.
Есть фрагмент:
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
package com.example.navigationsample;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;
 
 
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView;
 
 
public class Page extends Fragment 
{
 
    public Integer Pos = null; 
    public String Raz = null; 
    public String URL = null; 
    public TextView tvTitle;
    public TextView tvCont;
    public ImageView ivImg;
    public WebView mWebView;
    public Map<String, String> ClicMap = new TreeMap<String, String>();
    public HtmlHelper Hcalss = new HtmlHelper();
    public Integer PageCounter; 
    private ProgressDialog pd;
    public TextView btnNext;
    public TextView btnBack; 
    final String mimeType = "text/html";
    final String encoding = "utf-8";
    public String Link = "";
    public String title = "";
    public String Dated = "";
    public String UrlImg = "";
    public String Strong = "";
    public String BodyH = "";   
    public Page(ArrayList<String> P)
    {
        Pos = Integer.valueOf(P.get(0));
        Raz = P.get(1);
    }   
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.page, null); 
                 mWebView = (WebView) view.findViewById(R.id.webview); 
                 mWebView.getSettings().setJavaScriptEnabled(true);
                 btnNext = (TextView) view.findViewById(R.id.next);  
                 btnBack = (TextView) view.findViewById(R.id.back);                  
                 Document xmlDoc = Jsoup.parse(Raz);               
                    Elements items = xmlDoc.select("item"); 
                    PageCounter = items.size();
                    Element item = items.get(Pos);              
                    for(Element b : item.select("guid"))
                    {
                        Link = Link + b.text();                 
                    }                       
                    
                     
                    for(Element b : item.select("title"))
                    {
                        title = title + b.text();                   
                    }   
                    
                    for(Element b : item.select("pubDate"))
                    {
                        Dated = Dated + b.text();                   
                    }   
                    Dated = Dated.replace("+0400", "");
                    
                    for(Element b : item.select("description"))
                    {
                        UrlImg = UrlImg + getInmgUrl(b.text());
                    }                   
                    
                    for(Element b : item.select("description"))
                    {
                        Strong = Strong + getStrong(b.text());
                    }                       
                    
                    
                    for(Element b : item.select("description"))
                    {
                        BodyH = BodyH + getBody(b.text());
                    }   
                    if(Pos == (PageCounter -1))
                    {
                        btnNext.setText("");
                        btnNext.setEnabled(false);
                    }
                    if(Pos == 0)
                    {
                        btnBack.setText("");
                        btnBack.setEnabled(false);              
                    }                   
                    String Body = "<img src=\""+ UrlImg + "\" />" + "<h1>" +  title +"</h1>" + "<p style=\"font-size: 85%; font-weight: normal;\">" + DataConf(Dated) +  "</p>" + "<br />" + "<strong>" + Strong  + "</strong>" + "<p>"+ BodyH +"</p><br /><p><a href=\""+ Link +"\">Перейти на сайт</a></p>";
                    String Html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>"+Body+"</body></html>";
                    mWebView.getSettings().setDefaultTextEncodingName("utf-8"); 
                    mWebView.loadDataWithBaseURL(null, Html,"text/html", "UTF-8", null);                    
                 
                 btnNext.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Integer fg = Pos +1;
                            ArrayList<String> dataVar = new ArrayList<String>();
                            dataVar.add(String.valueOf(fg));
                            dataVar.add(Raz);
                            Fragment frag1 = new Page(dataVar); 
                            FragmentTransaction ft = getFragmentManager().beginTransaction();
                            ft.replace(R.id.content, frag1).commit();                           
                            
                        }
                    }); 
 
                 btnBack.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Integer fg = Pos -1;
                            ArrayList<String> dataVar = new ArrayList<String>();
                            dataVar.add(String.valueOf(fg));
                            dataVar.add(Raz);
                            Fragment frag1 = new Page(dataVar); 
                            FragmentTransaction ft = getFragmentManager().beginTransaction();
                            ft.replace(R.id.content, frag1).commit();                           
                            
                        }
                    }); 
                 
                 
          return view;
      }
        public String DataConf(String a)
        {
            String Ass = a;
            String TestStringOlolo = Ass;
            String[] Ololo = TestStringOlolo.split(" ");
            TestStringOlolo = Ololo[1] + " " + Ololo[2] + " " + Ololo[3] + " " + Ololo[4];
            String Mec = Ololo[2];
            Mec = Mec.replace(" ","");      
            Map<String, String> dateForm = new TreeMap<String, String>();
            dateForm.put("Jan","Январь");
            dateForm.put("Feb","Февраль");
            dateForm.put("Mar","Март");
            dateForm.put("Apr","Апрель");
            dateForm.put("May","Май");
            dateForm.put("Jun","Июнь");
            dateForm.put("Jul","Июдь");
            dateForm.put("Aug","Август");
            dateForm.put("Ag","Август");
            dateForm.put("Sept","Сентябрь");
            dateForm.put("Oct","Октябрь ");
            dateForm.put("Nov","Ноябрь");
            dateForm.put("Dec","Декабрь");
            TestStringOlolo = Ololo[1] + " " +dateForm.get(Ololo[2]) + " " + Ololo[3];  
            return TestStringOlolo;
        }
        public String convertStreamToString(java.io.InputStream is) {
            java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
            return s.hasNext() ? s.next() : "";
        }   
        public String getInmgUrl(String Imf)
        {
            Document xmlDocDes = Jsoup.parse(Imf);
            Elements el = xmlDocDes.select("img");
            String Fd = "";
               for(Element b : el)
               {
                   Fd = Fd + b.attr("src");
                    
                }           
            return Fd;
        }   
        
        public String getStrong(String Imf)
        {
            Document xmlDocDes = Jsoup.parse(Imf);
            Elements el = xmlDocDes.select("strong");
            String Fd = "";
               for(Element b : el)
               {
                   Fd = Fd + b.text();
                    
                }           
            return Fd;
        }   
        
        public String getBody(String Imf)
        {
            Document xmlDocDes = Jsoup.parse(Imf);
            Elements el = xmlDocDes.select("p");
            el.remove(0);
            String Fd = "";
               for(Element b : el)
               {
                   Fd = Fd + b.text();
                    
                }                 
            return Fd;
        }           
}
Необходимо обработать нажатие на физ. кнопку Back(именно для этого форагмента) и передать ей данный функционал:
Java
1
2
3
4
5
6
7
                            Integer fg = Pos -1;
                            ArrayList<String> dataVar = new ArrayList<String>();
                            dataVar.add(String.valueOf(fg));
                            dataVar.add(Raz);
                            Fragment frag1 = new Page(dataVar); 
                            FragmentTransaction ft = getFragmentManager().beginTransaction();
                            ft.replace(R.id.content, frag1).commit();
Вариант с
Java
1
2
3
4
  @Override
  public void onBackPressed() {
 
  }
Не прокатывает пишет:
Java
1
2
Description Resource    Path    Location    Type
The method onBackPressed() of type Page must override or implement a supertype method   Page.java   /SimpleNavigationSample/src/com/example/navigationsample    line 67 Java Problem
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 12:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка физической кнопки в фрагменте (Программирование Android):

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

Обработка кнопки гарнитуры - Программирование Android
Не блютуз, хотя не знаю, есть ли там разница. В общем, MEDIA_BUTTON'ом оно называется.. Андроид 4.1.2 Перепробовал всё, что с этим...

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

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

Webview на фрагменте - Программирование Android
Всем привет! Есть проблемка, может кто сталкивался... Есть фрагмент с webview. Меняю размер шрифта в webview, и меняется только размер на...

Фрагмент во фрагменте - Программирование Android
Добрый день. А возможно ли создание фрагмента состоящего из нескольких фрагментов?

10
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
24.01.2014, 13:06 #2
я так делал:
в активити определям переменную public static int state=0, во фрагменте в методе onCreate этой переменной присваиваем какое-либо значение, у каждого фрагмента свое значение.
Далее в активити переопределяем метод onBackPressed и в нем ставим оператор switch, который в зависимости от значения нашей переменной state выполняет те или иные действия.
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
24.01.2014, 14:31  [ТС] #3
Цитата Сообщение от Gabberr Посмотреть сообщение
я так делал:
в активити определям переменную public static int state=0, во фрагменте в методе onCreate этой переменной присваиваем какое-либо значение, у каждого фрагмента свое значение.
Далее в активити переопределяем метод onBackPressed и в нем ставим оператор switch, который в зависимости от значения нашей переменной state выполняет те или иные действия.
1. Мне надо обработать кнопку назад именно для фрагмента, дабы листать фрагменты.
2. Если бы я мог переопределить onBackPressed я бы и не писал тут. В этот и звключается проблема.
0
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
24.01.2014, 14:41 #4
1. Мне надо обработать кнопку назад именно для фрагмента, дабы листать фрагменты.
ну так я про то и написал, в свитче в зависимости от номера фрагмента, выполняете то, что нужно.
2. Если бы я мог переопределить onBackPressed я бы и не писал тут. В этот и звключается проблема.
Как так не можете переопределить? может не том месте пытаететь? нужно в классе который наследуется от Activity
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
24.01.2014, 14:47 #5
Цитата Сообщение от VictorAkira Посмотреть сообщение
Мне надо обработать кнопку назад именно для фрагмента, дабы листать фрагменты.
Листать в порядке их добавления на вашу активити?
Каждую транзакцию которая выполняет перемещение фрагментов, добавляйте в BackStack при помощи метода addToBackStack(String name). Благодаря этому, каждое новое нажатие кнопки назад, будет отменять транзакции одну за другой пока BackStack не опустеет. И когда он будет пустым, еще одно нажатие "назад" закроет активити.
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
24.01.2014, 15:27  [ТС] #6
Я видно не так объяснил.
У меня есть фрагмент. Он не определяется в MainActivity extends FragmentActivity и от него зависит относительно.
Его контент генерируется в зависимости от переданных в него данных(тоесть фрагмент Page при нажатии генерирует Новую Page).
Java
1
2
3
4
ArrayList<String> dataVar = new ArrayList<String>();
dataVar.add(String.valueOf(fg));
dataVar.add(Raz);
Fragment frag1 = new Page(dataVar);
Задача при нажатии на кнопку передать эти параметры. Параметры у каждого экземпляра PAge свои.
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
25.01.2014, 22:26 #7
в активности переопределяете onBackPressed();
в методе вызываем у экземляра фрагмента fragment.onBackPressed();
и в этом случаи только во фрагменте сработает переопределенный метод.
Все довольно запутанно, когда то пришлось повозиться тоже с этим (
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
26.01.2014, 00:20  [ТС] #8
В какой активности переопределить? В активности фрагмента? Или Фрагмент листа?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
26.01.2014, 00:24 #9
в той в которую выводите фрагмент
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
28.01.2014, 10:30  [ТС] #10
Хорошо, ок.
А как мне передать данные в этот метод?
Мне же надо при нажатие перейти в фрагмент и передать ему переменные.
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
28.01.2014, 11:35 #11
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Profile extends Fragment {
private int v1;
private int v2;
 
public static Profile newInstance(int arg0, int arg1) {
        Profile fragment = new Profile();
        fragment.setParams(arg0, arg1);
        return fragment;
    }
 
private void setParams(int arg0, int arg1l) {
        this.v1 = arg0;
                this.v2 = arg1;
    }
}
Для вызова используйте

Java
1
Profile.newInstance(0, 1);
0
28.01.2014, 11:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 11:35
Привет! Вот еще темы с ответами:

Остановить выполнение во фрагменте - Программирование Android
Есть для примера код который расположен в фрагменте. как остановить программу // Если номер введен неверно ...

MenuItemSelected не работает в фрагменте - Программирование Android
Метод return super.onMenuItemSelected(featureId, item); никак не хочет работать в фрагменте, почему? До работы приложения остаётся только...

Отображение ListView во фрагменте - Программирование Android
Привет, всем! Буду очень признательна, если кто-нибудь сможет мне помочь разобраться. Я пишу программку для расписания занятий моего...

Потоки в фрагменте не запустить? - Программирование Android
Не могу использовать потоки в фрагменте. использую конструкцию: new Thread() { @Override public void run() { ...code ...


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

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

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