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

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

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

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

24.01.2014, 12:14. Просмотров 2517. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 12:14     Обработка физической кнопки в фрагменте
Посмотрите здесь:
Вывод во втором фрагменте длины текста, введённого в первом фрагменте активити Android
Android Обработка кнопки гарнитуры
Обработка удерживания кнопки нажатой Android
Не работает клиент/ сервер на физической машине Android
Android Webview на фрагменте
Android Остановить выполнение во фрагменте
Отображение ListView во фрагменте Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
24.01.2014, 13:06     Обработка физической кнопки в фрагменте #2
я так делал:
в активити определям переменную public static int state=0, во фрагменте в методе onCreate этой переменной присваиваем какое-либо значение, у каждого фрагмента свое значение.
Далее в активити переопределяем метод onBackPressed и в нем ставим оператор switch, который в зависимости от значения нашей переменной state выполняет те или иные действия.
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 я бы и не писал тут. В этот и звключается проблема.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
24.01.2014, 14:41     Обработка физической кнопки в фрагменте #4
1. Мне надо обработать кнопку назад именно для фрагмента, дабы листать фрагменты.
ну так я про то и написал, в свитче в зависимости от номера фрагмента, выполняете то, что нужно.
2. Если бы я мог переопределить onBackPressed я бы и не писал тут. В этот и звключается проблема.
Как так не можете переопределить? может не том месте пытаететь? нужно в классе который наследуется от Activity
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
24.01.2014, 14:47     Обработка физической кнопки в фрагменте #5
Цитата Сообщение от VictorAkira Посмотреть сообщение
Мне надо обработать кнопку назад именно для фрагмента, дабы листать фрагменты.
Листать в порядке их добавления на вашу активити?
Каждую транзакцию которая выполняет перемещение фрагментов, добавляйте в BackStack при помощи метода addToBackStack(String name). Благодаря этому, каждое новое нажатие кнопки назад, будет отменять транзакции одну за другой пока BackStack не опустеет. И когда он будет пустым, еще одно нажатие "назад" закроет активити.
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 свои.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
25.01.2014, 22:26     Обработка физической кнопки в фрагменте #7
в активности переопределяете onBackPressed();
в методе вызываем у экземляра фрагмента fragment.onBackPressed();
и в этом случаи только во фрагменте сработает переопределенный метод.
Все довольно запутанно, когда то пришлось повозиться тоже с этим (
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
26.01.2014, 00:20  [ТС]     Обработка физической кнопки в фрагменте #8
В какой активности переопределить? В активности фрагмента? Или Фрагмент листа?
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
26.01.2014, 00:24     Обработка физической кнопки в фрагменте #9
в той в которую выводите фрагмент
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
28.01.2014, 10:30  [ТС]     Обработка физической кнопки в фрагменте #10
Хорошо, ок.
А как мне передать данные в этот метод?
Мне же надо при нажатие перейти в фрагмент и передать ему переменные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 11:35     Обработка физической кнопки в фрагменте
Еще ссылки по теме:
Android MenuItemSelected не работает в фрагменте
Потоки в фрагменте не запустить? Android
Обработать событие onBackPressed во фрагменте Android
Изменить из активити данные в фрагменте Android
Где в Фрагменте инициализировать доступ к базе? Android

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

Или воспользуйтесь поиском по форуму:
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);
Yandex
Объявления
28.01.2014, 11:35     Обработка физической кнопки в фрагменте
Ответ Создать тему
Опции темы

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