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

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

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

Передача параметров из Activity в FragmentActivity - Программирование Android

24.04.2016, 17:23. Просмотров 186. Ответов 0
Метки нет (Все метки)

Доброго времени суток.

Никак не могу разобраться. Нужно передать некоторые параметры из Activity в FragmentActivity. Суть такая: изначально было два активити, родительское и из него запускалось дочернее, в которое передавались параметры, все работало:
Родительский:
Кликните здесь для просмотра всего текста
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
public class MainActivity extends AppCompatActivity  implements View.OnClickListener {
 
    Button btn414;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vns4);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setLogo(R.mipmap.ic_launcher);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
 
        btn414 = (Button) findViewById(R.id.btn414);
        btn414.setOnClickListener(this);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            
            case R.id.btn414:
                Intent intent4 = new Intent(this, PollActivity.class);
                intent4.putExtra("par1", "1");
                intent4.putExtra("par2", "2");
                intent4.putExtra("par3", "3");
                intent4.putExtra("par4", "Название");
                startActivity(intent4);
                break;
            default:
                break;
        }
    }
 
}


Дочерний:
Кликните здесь для просмотра всего текста
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
public class PollActivity extends AppCompatActivity {
 
    TextView textView, testMsg;
    Button btnCancel, btn_poll;
    String par1, par2, par3, par4;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poll);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
        textView = (TextView)findViewById(R.id.textView);
        testMsg = (TextView)findViewById(R.id.txtArea);
        testMsg.setMovementMethod(new ScrollingMovementMethod());
 
        networktask = new NetworkTask();
        btnCancel = (Button) findViewById(R.id.btnCancel);
        btn_poll = (Button)findViewById(R.id.btn_poll);
 
        Intent intent = getIntent();
 
        par1 = intent.getStringExtra("par1");
        par2 = intent.getStringExtra("par2");
        par3 = intent.getStringExtra("par3");
        par4 = intent.getStringExtra("par4");
        textView.setText(par4);
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}


В дочернем активити запускалась фоновая задача, из которой в текстовое поле выводились данные. Захотелось, чтобы эти данные сохранялись при повороте экрана, и, погуглив, я переделал дочернее активити взяв информацию отсюда.

Соответственно появился фрагмент, в котором стала выполняться фоновая задача:
Кликните здесь для просмотра всего текста
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
public class PollFragment extends Fragment {
  private static final String TAG = PollFragment.class.getSimpleName();
  private static final boolean DEBUG = true;
 
  public interface TaskCallbacks {
    void onPreExecute();
    void onProgressUpdate(String progress);
    void onCancelled();
    void onPostExecute();
  }
 
  private TaskCallbacks mCallbacks;
  private DummyTask mTask;
  private boolean mRunning;
  String par1, par2, par3;
 
 
  @Override
  public void onAttach(Activity activity) {
    if (DEBUG) Log.i(TAG, "onAttach(Activity)");
    super.onAttach(activity);
    if (!(activity instanceof TaskCallbacks)) {
      throw new IllegalStateException("Activity must implement the TaskCallbacks interface.");
    }
 
    mCallbacks = (TaskCallbacks) activity;
  }
 
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}
 
  @Override
  public void onDestroy() {
    super.onDestroy();
    cancel();
  }
 
 
  /**
   * Запуск фоновой задачи.
   */
  public void start() {
    if (DEBUG) Log.i(TAG, "start()");
    if (!mRunning) {
      mTask = new DummyTask();
      mTask.execute(par1, par2, par3);
      mRunning = true;
    }
  }
 
  /**
   * Отмена фоновой задачи.
   */
  public void cancel() {
    if (mRunning) {
      mTask.cancel(false);
      mTask = null;
      mRunning = false;
    }
  }
 
  /**
   * Возвращает текущее состояние фоновой задачи.
   */
  public boolean isRunning() {
    return mRunning;
  }
 
 
  private class DummyTask extends AsyncTask<String, String, String> {
 
    @Override
    protected void onPreExecute() {
      // Представляет вызов Активити.
      mCallbacks.onPreExecute();
      mRunning = true;
    }
 
    @Override
    protected String doInBackground(String... params) {
      //инициализация переменных
 
      if (isCancelled()){
        return null;}
 
      try {
            //обработка фоновой задачи
      } finally {
        try {
          //можно попробовать тут закрыть соединение
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      return message;
    }
 
    @Override
    protected void onProgressUpdate(String... progress) {
      // Proxy the call to the Activity.
      mCallbacks.onProgressUpdate(progress[0]);
    }
 
    @Override
    protected void onCancelled() {
      // Proxy the call to the Activity.
      mCallbacks.onCancelled();
      mRunning = false;
    }
 
    @Override
    protected void onPostExecute(String ignore) {
      // Proxy the call to the Activity.
      mCallbacks.onPostExecute();
      mRunning = false;
    }
  }
 
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
  }
 
}


И дочернее активити изменилось на:
Кликните здесь для просмотра всего текста
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
public class PollActivity extends FragmentActivity implements PollFragment.TaskCallbacks {
    private static final String TAG = PollActivity.class.getSimpleName();
    private static final boolean DEBUG = true;
 
    private static final String KEY_MSG_PROGRESS = "current_progress";
    private static final String TAG_TASK_FRAGMENT = "task_fragment";
 
    private PollFragment mTaskFragment;
    private ProgressBar mProgressBar;
    private TextView mPercent;
    private Button btn_poll, btnCancel;
    private TextView textView, testMsg;
    private String par1, par2, par3, par4;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poll);
 
        /*Intent intent = getIntent();*/
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            nameObj = extras.getString("par4");
            textView.setText(par4);
        }
        /*
        /*par1 = intent.getStringExtra("par1");
        par2 = intent.getStringExtra("par2");
        par3 = intent.getStringExtra("par3");
        par4 = intent.getStringExtra("par4");
        textView.setText(par4);*/
 
        // Initialize views.
        mProgressBar = (ProgressBar) findViewById(R.id.progress_horizontal);
        textView = (TextView)findViewById(R.id.textView);
        testMsg = (TextView)findViewById(R.id.txtArea);
        testMsg.setMovementMethod(new ScrollingMovementMethod());   //разрешаем прокрутку
        btn_poll = (Button) findViewById(R.id.btn_poll);
        btnCancel = (Button) findViewById(R.id.btnCancel);
        btn_poll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mTaskFragment.isRunning()) {
                    mTaskFragment.cancel();
                } else {
                    mTaskFragment.start();
                    testMsg.setText("");
                }
            }
        });
 
        // Restore saved state.
        if (savedInstanceState != null) {
            testMsg.setText(savedInstanceState.getString(KEY_MSG_PROGRESS));
        }
 
        FragmentManager fm = getSupportFragmentManager();
        mTaskFragment = (PollFragment) fm.findFragmentByTag(TAG_TASK_FRAGMENT);
 
        
        if (mTaskFragment == null) {
            mTaskFragment = new PollFragment();
            Bundle bundle = new Bundle();
            bundle.putString("1", "4");
            bundle.putString("2", "5");
            bundle.putString("3", "6");
            mTaskFragment.setArguments(bundle);
            fm.beginTransaction().add(mTaskFragment, TAG_TASK_FRAGMENT).commit();
        }
 
        if (mTaskFragment.isRunning()) {
            btn_poll.setText("Отмена");
        } else {
            btn_poll.setText("Старт");
        }
    }
 
    ...
 
}


И теперь при попытке прочитать переданные из родительского активити данные
Java
1
2
3
4
5
Bundle extras = getIntent().getExtras();
        if (extras != null) {
            nameObj = extras.getString("par4");
            textView.setText(par4);
        }
приложение сразу вылетает при запуске активити. Если данные не считывать - всё работает, при этом из FragmentActivity в Fragment и обратно передача работает.

Соответвенно вопрос, как правильно передать данные из активити, чтобы отправить их дальше во фрагмент с фоновой задачей.

Добавлено через 15 часов 36 минут
В общем неактуально, разобрался, нашел ошибочку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 17:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача параметров из Activity в FragmentActivity (Программирование Android):

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

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

Передача данных между activity - Программирование Android
Здравствуйте! Для передачи данных между Activity требуется Пользователь вводит данные в строку(текст)-где этот param...

Передача значений между Activity - Программирование Android
Есть 2 Activity, Main и Two. В Main - TextView. в Two - Button и Edittext (Decimal) Как мне передать с Two в Main значение указное в...

Передача данных из activity в service - Программирование Android
Здравствуйте, как можно организовать передачу данных из activity в сервис, если сервис уже запущен и работает. как он должен отлавливать...

Передача данных из Activity в Fragment - Программирование Android
Есть основной класс (puplic class ViewContact) в котором есть фрагменты (public static class MainFragment extends Fragment), есть база...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 17:23
Привет! Вот еще темы с ответами:

Передача переменной в другую Activity - Программирование Android
package start.project123; import android.app.Activity; import android.content.Intent; import android.content.res.Resources; ...

Передача cookie в другую Activity - Программирование Android
Делаю пост запрос на сервер (авторизация) Сохраняю куки: List&lt;Cookie&gt; CCookies; ..... HttpResponse response =...

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

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


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

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

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