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

Из Активити в Фрагмент - Android

Войти
Регистрация
Восстановить пароль
 
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 00:27     Из Активити в Фрагмент #1
Как передать данные из активити в фрамгент?
пробую так но выкидывает из приложения
Java
1
2
Fragment f = getFragmentManager().findFragmentById(R.id.content_frame); 
                              ((ThirdFragment) f).setBmp(bmp);
надо передать bmp
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
13.05.2015, 00:31     Из Активити в Фрагмент #2
Опишите подробнее для чего вам нужно передать из активити данные в фрагмент? У вас несколько фрагментов в одной активити? Если да, ЗАЧЕМ? Если нет, отвечайте на первый вопрос)
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 00:36  [ТС]     Из Активити в Фрагмент #3
я в активити получаю по интенту фото из галереи, точнее его fileUri и из этого fileUri делаю Bitmap, теперь мне надо этот Bitmap отправить фрагменту дабы в каждом из 3 фрагментов обрабатывать эти изображения по своему
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
13.05.2015, 00:47     Из Активити в Фрагмент #4
Семан, нужна дополнительная информация - как вы отображаете фрагмент на экране, каким образом приходит интент в активити?
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 01:07  [ТС]     Из Активити в Фрагмент #5
Вот код и один из фрагментов, другие не тронуты пока

MainActivity
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
package ru.Arzumanyan.fotoredaktor;
 
 
import java.io.InputStream;
 
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Fragment;
import android.content.Intent;
import android.content.res.Configuration;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
 
public class MainActivity extends ActionBarActivity {
 
    
    private static final int IMAGE_FROM_GALLERY = 3;
     //int OPEN_FILE;
     private static final int OPEN_FILE = 300;
    ImageView imgView;
     Intent intent;
    ThirdFragment tF = new ThirdFragment();
     
    Uri ChossefileUri;
    Uri fileUri;
    Bitmap bmp;
    private DrawerLayout myDrawerLayout;
    private ListView myDrawerList;
    private ActionBarDrawerToggle myDrawerToggle;
    String path=new String();
    InputStream input; 
    // navigation drawer title
    private CharSequence myDrawerTitle;
    // used to store app title
    private CharSequence myTitle;
    private SeekBar seekBar;
 
    private String[] viewsNames;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            //intent= tFrag.getIntent();
        intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, OPEN_FILE); 
        imgView = (ImageView) findViewById(R.id.imageView);
        seekBar = (SeekBar)findViewById(R.id.seekBar); 
        
        //Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), fileUri);
        
        myTitle =  getTitle();
        myDrawerTitle = getResources().getString(R.string.menu);
 
        // load slide menu items
        viewsNames = getResources().getStringArray(R.array.views_array);
        myDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        myDrawerList = (ListView) findViewById(R.id.left_drawer);
 
        myDrawerList.setAdapter(new ArrayAdapter<String>(this, 
                R.layout.drawer_list_item, viewsNames));
 
        // enabling action bar app icon and behaving it as toggle button
        android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
 
        myDrawerToggle = new ActionBarDrawerToggle(this, myDrawerLayout,
                R.string.open_menu,
                R.string.close_menu
        ) {
            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle(myTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }
 
            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle(myDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        myDrawerLayout.setDrawerListener(myDrawerToggle);
 
        if (savedInstanceState == null) {
            // При первой загрузке приложения мы задаем номер отображаемого фрагмента (нумерация с 0),
            //т.к. пользователь еще ничего не успел выбрать:
            displayView(0);
        }
 
        myDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    }
 
   
    public void onActivityResult(int
              requestCode, int resultCode, Intent
              data) {
 
              super.onActivityResult(requestCode, resultCode, data);
             // OPEN_FILE=tF.getOpenFile(); 
              
            
              
              if (resultCode == RESULT_OK) {
                  if(requestCode == OPEN_FILE){ 
                      //выбрали рисунок из галерееи
                      ChossefileUri = data.getData(); 
                      if(ChossefileUri !=null){ 
                           fileUri = ChossefileUri;
                           
                          if(fileUri != null) 
                          {
                             //тут уже работейте с fileUri вашего файла
                             // imgView.setImageURI(fileUri); 
                              fileUri = Uri.parse(path);
                              
                              bmp =imgView.getDrawingCache();
                              //bmp =BitmapFactory.decodeFile(path);
                              
                              bmp =BitmapFactory.decodeStream(input);
                              imgView.setImageBitmap(bmp);
                              //Fragment f = getFragmentManager().findFragmentById(R.id.content_frame); 
                              //((ThirdFragment) f).setBmp(bmp);
                          }
                      }
                   } 
               }
}
 
    
    
   
    
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(
                AdapterView<?> parent, View view, int position, long id
        ) {
            // display view for selected nav drawer item
            displayView(position);
        }
    }
 
    private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new FirstFragment();
                break;
            case 1:
                fragment = new SecondFragment();
                break;
            case 2:
                fragment = new ThirdFragment();
                break;
            default:
                break;
        }
 
        if (fragment != null) {
            android.app.FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame, fragment).commit();
 
            // update selected item and title, then close the drawer
            myDrawerList.setItemChecked(position, true);
            myDrawerList.setSelection(position);
            setTitle(viewsNames[position]);
            myDrawerLayout.closeDrawer(myDrawerList);
 
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // toggle nav drawer on selecting action bar app icon/title
        if (myDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
        switch (item.getItemId()) {
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
    /**
     * Called when invalidateOptionsMenu() is triggered
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if navigation drawer is opened, hide the action items
        boolean drawerOpen = myDrawerLayout.isDrawerOpen(myDrawerList);
        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }
 
    @Override
    public void setTitle(CharSequence title) {
        myTitle = title;
        getSupportActionBar().setTitle(myTitle);
    }
 
    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        myDrawerToggle.syncState();
    }
 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        myDrawerToggle.onConfigurationChanged(newConfig);
    }
}
ThirdFragment
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
package ru.Arzumanyan.fotoredaktor;
 
 
 
import android.app.Fragment;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.net.Uri;
import android.graphics.Bitmap;
 
public class ThirdFragment extends Fragment implements SeekBar.OnSeekBarChangeListener {
    
    ImageView imgView;
    private SeekBar seekBar;
    //Uri mfileUri;
    Bitmap mBmp;
    private int start,alpha,red,green,blue;
    
      public void gamma()
     {
        
        //layout.setBackgroundColor(Color.argb(alpha, red, green, blue));
        
     }
      
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        
        
      View rootView = inflater.inflate(R.layout.fragment_third, container, false);
     
      imgView = (ImageView) rootView.findViewById(R.id.imgView);
      seekBar = (SeekBar) rootView.findViewById(R.id.seekBar); 
    //  layout = (RelativeLayout) findViewById(R.id.myScreen);
     // seekBar.setOnSeekBarChangeListener(this);
     
      
      
      //imgView.setImageURI(mfileUri); 
     
        return rootView;
    }
 
 
    @Override
    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
        // TODO Auto-generated method stub
        progress = seekBar.getProgress();
        
    }
 
 
    @Override
    public void onStartTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub
        
    }
 
 
    @Override
    public void onStopTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub
        
    }
    
    public void setBmp(Bitmap bmp)
    {
        mBmp=bmp;
    }
   
}
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
13.05.2015, 01:15     Из Активити в Фрагмент #6
Семан, вы просто скопировали код из нескольких источников, в надежде, что у вас все заработает?
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 01:24  [ТС]     Из Активити в Фрагмент #7
нет почему? все работает до imgView.setImageURI(fileUri);
выводит картинку нормально, но для его обработки его надо перевести в битовую и отправить фрагментам, вот в этом у меня проблема
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
13.05.2015, 01:27     Из Активити в Фрагмент #8
Семан, а что у вас есть bitmap? Я по вашему коду не нашел типа этого объекта.
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 01:34  [ТС]     Из Активити в Фрагмент #9
Да есть, вот Bitmap bmp;
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
13.05.2015, 01:36     Из Активити в Фрагмент #10
Семан, и правда, не заметил)
Семан
1 / 1 / 0
Регистрация: 13.03.2012
Сообщений: 278
13.05.2015, 01:50  [ТС]     Из Активити в Фрагмент #11
бывает
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
13.05.2015, 02:25     Из Активити в Фрагмент #12
Семан, можете передавать данные из активности во фрагмент в момент его создания. Это делается через конструктор newInstance с параметрами.
Также можно передавать данные после создания. Для этого можно написать, например, listener или использовать findFragmentById, как вы и хотели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2015, 10:47     Из Активити в Фрагмент
Еще ссылки по теме:

Что лучше использовать фрагмент или активити Android
Android Передать SearchView из активити во фрагмент
Android Переход из уведомления в фрагмент активити
На телефоне highscreen 3 на всех активити происходит быстрый самовозврат к главной активити Android
Android Фрагмент сжимается в активити

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

Или воспользуйтесь поиском по форуму:
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.05.2015, 10:47     Из Активити в Фрагмент #13
Семан, не самый красивый вариант, но:

1. Интерфейс

Java
1
2
3
4
5
6
7
import android.graphics.Bitmap;
 
public interface IImageCompleteListener {
 
    void onComplete(Bitmap bitmap);
 
}
2. Manager

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
import android.graphics.Bitmap;
 
public class CompleteManager {
 
    public static IImageCompleteListener listener;
 
    public static void callComplete(Bitmap bitmap) {
        if (listener != null) {
            listener.onComplete(bitmap);
        }
    }
 
}
3. Во фрагменте:

Java
1
2
3
4
5
6
7
8
9
10
@Override
    public void onResume() {
        super.onResume();
        CompleteManager.listener = new IImageCompleteListener() {
            @Override
            public void onComplete(Bitmap bitmap) {
                //Обработка изображения                
            }
        };
    }
4. Вызов из активити:

Java
1
CompleteManager.callComplete(bmp);
Yandex
Объявления
13.05.2015, 10:47     Из Активити в Фрагмент
Ответ Создать тему
Опции темы

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