Как передать значение переменной из Activity в класс?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Как передать значение переменной из Activity в класс?

Сообщение massya » 19 окт 2013, 12:17

Как передать значение переменной из Activity1 в Activity2 понятно, с помощью Intent.

А как передать значение переменной из Activity в класс?

Ситуация такая:
1. Есть Activity1 с ListView, при нажатии на какой то из пунктов, получаем номер позиции нажатого пункта ListView и это значение нужно передать в класс PageFragment, и запускается Activity2.
2. Activity2 унаследован от FragmentActivity и содержит ViewPager, который заполняется с помощью FragmentStatePagerAdapter, сам фрагмент описан в классе PageFragment который унаследован от Fragment. Как передать в класс PageFragment номер позиции нажатого пункта ListView Activity1. Значение это будет задавать условие, какой массив строк будет использовать PageFragment при отображении в Activity2.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Как передать значение переменной из Activity в класс?

Сообщение rezak90 » 19 окт 2013, 13:14

через Bundle
R.id.team
Политика на форуме запрещена

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Как передать значение переменной из Activity в класс?

Сообщение Mikhail_dev » 19 окт 2013, 13:51

А что, геттеры и сеттеры уже вышли из моды? Или фрагмент на момент клика в первой активности не создан?

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 19 окт 2013, 17:46

rezak90 писал(а):через Bundle
А можно как то точнее.

Вот первый Activity и его метод отвечающий за нажатие на ListView. Мне нужно запустить с помощью Intent второй Activity, а в класс
PageFragment передать int position. Как это сделать?

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

Как здесь это реализовать?
}

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Как передать значение переменной из Activity в класс?

Сообщение rezak90 » 19 окт 2013, 18:14

В активити:
[syntax=java]Bundle bundle = new Bundle();
bundle.putString(MyFragment.NEWS_ID, newsId);
ft.replace(R.id.flHome, MyFragment.newInstance(bundle), MyFragment.TAG);
ft.addToBackStack(CommentFragment.TAG);
ft.commit();[/syntax]
В фрагменте:
[syntax=java]public static MyFragment newInstance(Bundle bundle)
{
MyFragment f = new MyFragment();
f.setArguments(bundle);
return f;
}[/syntax]
Во фрагменте вытаскиваем значения так:
[syntax=java]getArguments().getString(NEWS_ID);[/syntax]
R.id.team
Политика на форуме запрещена

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 19 окт 2013, 18:54

rezak90 писал(а):В активити:
[syntax=java]Bundle bundle = new Bundle();
bundle.putString(MyFragment.NEWS_ID, newsId);
ft.replace(R.id.flHome, MyFragment.newInstance(bundle), MyFragment.TAG);
ft.addToBackStack(CommentFragment.TAG);
ft.commit();[/syntax]
В фрагменте:
[syntax=java]public static MyFragment newInstance(Bundle bundle)
{
MyFragment f = new MyFragment();
f.setArguments(bundle);
return f;
}[/syntax]
Во фрагменте вытаскиваем значения так:
[syntax=java]getArguments().getString(NEWS_ID);[/syntax]
Вот код, подскажите как сделать

Первый Activity:
[syntax=java]
public class CategoryActivity extends Activity {

private ListView categoryList;
private ArrayAdapter<String> adapter;
private String[] nameCategory;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category);

categoryList = (ListView) findViewById(R.id.listCategory);

nameCategory = getResources().getStringArray(R.array.name_category);

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, nameCategory);

categoryList.setAdapter(adapter);

categoryList.setOnItemClickListener(new ListViewClickListener());

getActionBar().setDisplayHomeAsUpEnabled(true);

}


private class ListViewClickListener implements OnItemClickListener {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//нужно передать int position в класс PageFragment
//и запустить PhraseActivity

}

}
}
[/syntax]

Второй Activity:
[syntax=java]public class PhraseActivity extends FragmentActivity {

static final int PAGE_COUNT = 6;

ViewPager pager;
PagerAdapter pagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phrase);

pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);

pager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}

@Override
public void onPageScrollStateChanged(int state) {
}
});
}

private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {

public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
return PageFragment.newInstance(position);
}

@Override
public int getCount() {
return PAGE_COUNT;
}

}

}[/syntax]

Класс в который нужно передать int position:
[syntax=java]

public class PageFragment extends Fragment {

static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";

int pageNumber;
String text;

public static PageFragment newInstance(int page) {
PageFragment pageFragment = new PageFragment();
Bundle arguments = new Bundle();
arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
pageFragment.setArguments(arguments);
return pageFragment;
}

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);

//здесь мне нужно int position из первого Activity

String[] a = getResources().getStringArray(R.array.abc);
text = a[pageNumber];

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);

TextView tvPage = (TextView) view.findViewById(R.id.tvPage);
tvPage.setText(text);

return view;
}
}[/syntax]

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 19 окт 2013, 20:10

no-- писал(а):А что, геттеры и сеттеры уже вышли из моды? Или фрагмент на момент клика в первой активности не создан?
не создан

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Как передать значение переменной из Activity в класс?

Сообщение rezak90 » 19 окт 2013, 20:24

я же показал как передать бандл во фрагмент, на момент создания фрагмента передаётся ему в агрументы бандл
R.id.team
Политика на форуме запрещена

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 19 окт 2013, 21:42

rezak90 писал(а):я же показал как передать бандл во фрагмент, на момент создания фрагмента передаётся ему в агрументы бандл

По поводу Activity вообще ничего не понятно, где в этом коде передача номера нажатого пункта в ListView?

Посмотрите мой код, двух Activity и класса PageFragment

Если не сложно, покажите как это должно выглядеть в моем коде

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 20 окт 2013, 15:18

massya писал(а):
rezak90 писал(а):я же показал как передать бандл во фрагмент, на момент создания фрагмента передаётся ему в агрументы бандл

По поводу Activity вообще ничего не понятно, где в этом коде передача номера нажатого пункта в ListView?

Посмотрите мой код, двух Activity и класса PageFragment

Если не сложно, покажите как это должно выглядеть в моем коде

Помогите, сижу уже не первый день

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Как передать значение переменной из Activity в класс?

Сообщение Foenix » 20 окт 2013, 18:13

ПОжалуйста, читай уроки по listview, там есть как достать нажатый номер
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

massya
Сообщения: 11
Зарегистрирован: 17 окт 2013, 13:51

Re: Как передать значение переменной из Activity в класс?

Сообщение massya » 20 окт 2013, 19:57

Foenix писал(а):ПОжалуйста, читай уроки по listview, там есть как достать нажатый номер
Я знаю как вытянуть нажатый номер и как его передать следующему Activity используя

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Bundle bundle = new Bundle();
bundle.putInt(POSITION, position);
intent.putExtras(bundle);
startActivity(intent);
}

Но как его передать в класс PageFragment унаследованный от Fragment?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Как передать значение переменной из Activity в класс?

Сообщение Foenix » 20 окт 2013, 20:00

при помощи Bundle, например
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить