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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Обработка нажатия на часть элемента списка http://www.cyberforum.ru/android-dev/thread1719155.html
Как в Android обработать нажатие не на весь элемент списка ListView, а на отдельный его элемент? onItemClickListener обрабатывает вроде только нажатие на элемент целиком.
Программирование Android Про активити и линию 1. (см. вложение) Обязательно ли для каждого раздела меню создавать новое активити? (при нажатии открывается отдельное окно кк в whatsapp) 2. (см. вложение) Как добавить еле видную горизонтальную линию между разделами (3 строки меню - линия - 3 строки меню)? http://www.cyberforum.ru/android-dev/thread1718870.html
Какая зависимость между размером шрифта и размером вью Программирование Android
Как вы думаете зависимость прямая или нет? вьюшка оборачивает текст конечно)
Программирование Android Не могу установить android Studio на винду
Здравствуйте! Я совсем запуталась и что-то сделала не так, видимо. Может не та версия студии? она же должна по другому выглядеть? :gcray:
Программирование Android Размер шрифта, TextView http://www.cyberforum.ru/android-dev/thread1718760.html
Здравствуйте! 1. Подскажите, пожалуйста, какой размер шрифта в sp лучше использовать в приложении по умолчанию. 2. А как можно во время выполнения программы узнать налезает ли TextView с текущим размером шрифта в sp и текущим текстом на другие элементы на экране?
Программирование Android ViewPager со страницами одного ListView Я нашел пример реализации ListView с ViewPager. В этом примере есть 3 страницы с тремя ListView. Но мне нужно работать с одним ListView. То есть 3 страницы и 1 ListView. Как такое можно реализовать? Добавлено через 20 минут Например вот тут человек работает с массивом. У него динамически создаются страницы, в зависимости от количества элементов. А как в этом случае массив заменить списком... подробнее

Показать сообщение отдельно
gelios_oleg
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 13

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

24.04.2016, 17:23. Просмотров 183. Ответов 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 минут
В общем неактуально, разобрался, нашел ошибочку.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru