Данные из класса исключению в фрагмент?
Добавлено: 07 апр 2015, 12:44
Стоит вопрос, передать данные с класса исключения где я принимаю SMS и хочу после некоторых операций над тестом передать в один из фрагментов в TextView?
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
А где создаете экземпляр вашего вспомогательного класса? возвращать return-м можете?lamberto писал(а):Пока непонятно, прокоментируйте пожалуйста!?
Не могу понять причем тут фрагмент манаджер, я же не с фрагмента данные передавать хочу, у меня этот класс с которого передаю тупо для исключения создать принимать входящий смс.
Код: Выделить всё
public class IncomingSms extends BroadcastReceiver {
final SmsManager sms = SmsManager.getDefault();
EditText etName;
final String LOG_TAG = "myLogs";
Context context;
DBHelper dbHelper;
SQLiteDatabase db;
Cursor c;
String result1;
String result2;
String result3;
CharSequence Masktemp1 = "WEx0";
CharSequence Masktemp2 = "WEx1";
CharSequence Maskbalance = "Balance:";
FragmentManager fm;
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM HH:mm ");
Date currentDate = new Date();
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String phoneNumber = "5556";
String senderNum = phoneNumber;
String message = currentMessage.getDisplayMessageBody();
Log.i("SmsReceiver", "Номер отправителя: " + senderNum + "; Cooбщение: " + message);
// Show alert
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "Номер отправителя: " + senderNum + ", Cooбщение: " + message, duration);
toast.show();
// Создание базы данных!
dbHelper = new DBHelper(context);
ContentValues cv = new ContentValues();
db = dbHelper.getWritableDatabase();
cv.put("sms", sdf.format(currentDate) + message);
c = db.query("mytable", null, null, null, null, null, null);
long rowID = db.insert("mytable", null, cv);
Log.d(LOG_TAG, "row inserted, ID = " + rowID + " Текст: " + sdf.format(currentDate) + message);
c.requery();
dbHelper.close();
if (message.contains(Masktemp1) == true) {
result1 = message.substring(21, 28);
Fragment4 yfc = new Fragment4();
Bundle bundle1 = new Bundle();
bundle1.putString("tag", result1);
Log.d(LOG_TAG,"Содержимое "+ bundle1 + "Результат" + result1);
yfc.getFragmentManager().findFragmentByTag("tag");
yfc.setArguments(bundle1);
}
else if (message.contains(Masktemp2))
result2 = message.substring(22, 29);
else if (message.contains(Maskbalance))
result3 = message.substring(9, 20);
}// end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" + e);
}
}
}Код: Выделить всё
public class Fragment4 extends Fragment {
static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
int pageNumber;
String stat;
static Fragment4 newInstance(int page) {
Fragment4 pageFragment = new Fragment4();
Bundle arguments = new Bundle();
arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
pageFragment.setArguments(arguments);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle bundle = getArguments();
if (bundle != null) {
stat = bundle.getString("tag");
}
View view = inflater.inflate(R.layout.fragment4, container, false);
Button btnzb = (Button) view.findViewById(R.id.button9);
Button btnztod = (Button) view.findViewById(R.id.button11);
Button btnztgd = (Button) view.findViewById(R.id.button10);
TextView txtzagb = (TextView) view.findViewById(R.id.zprb);
TextView txtzagt = (TextView) view.findViewById(R.id.zprt);
TextView txtsetb = (TextView) view.findViewById(R.id.setb);
TextView txtsetgd = (TextView) view.findViewById(R.id.setgd);
TextView txtsetod = (TextView) view.findViewById(R.id.setod);
txtsetgd.setText(stat);
Toast.makeText(getActivity(), stat, Toast.LENGTH_SHORT).show();
return view;
}
}
отсылай интентом в активити, а оттуда в фрагмент.lamberto писал(а):Хорошо логи то посмотрю... обязательно, но ошибка явная т.к. в bundle result1 приходит это видно по логу...
а вот далее либо не могу взять манаджер у фрагмента либо проблема в тразакции и здесь скорее всего фрагмент не пересоздается т.к. не видит id , если я правильно понимаю то id я указываю контейнера layoutа фрагмента в моем случаю это RelativeLayour4..?
Код: Выделить всё
[syntax=java5]@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
SlidingTabsColorsFragment fragment = new SlidingTabsColorsFragment();
transaction.replace(R.id.sample_content_fragment, fragment); //sample_content_fragment
transaction.commit();
}
}
[/syntax]Код: Выделить всё
String value = "1232131";
String key = "result_string";
Intent intent = new Intent(getApplicationContext(), MyFragmentActivity.class);
intent.putExtra( key, value );
startActivity(intent);
Код: Выделить всё
String key = "result_string";
String value = "default value";
if( getIntent() != null ) {
if( getIntent().getExtras() != null ) {
value = getIntent().getExtras().getString(key, "default value");
}
}
Код: Выделить всё
public class MyFragmentAdapter extends FragmentStatePagerAdapter {
private ArrayList<Fragment> list;
public MyFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list ) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int position) {
return list.get( position );
}
@Override
public int getCount() {
return list.size();
}
}
Код: Выделить всё
public class MyFragmentActivity extends FragmentActivity implements ViewPager.OnPageChangeListener {
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private ArrayList<Fragment> frList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_fragment_activity);
mPager = (ViewPager) findViewById(R.id.viewPager);
frList = new ArrayList<>();
frList.add( new MyFragment1() );
frList.add( new MyFragment2() );
frList.add( new MyFragment3() );
mPagerAdapter = new MyFragmentAdapter( getSupportFragmentManager(), frList );
mPager.setAdapter(mPagerAdapter);
((MyFragment1) frList.get(0)).callSomePublicMethod( "some string" ); // публичный метод из фрагмента1
}
//...
}
Код: Выделить всё
public void callSomePublicMethod(String str){
//...
}
Код: Выделить всё
[syntax=java5] @Override
public Fragment getItem(int position) {
mTabsPosition = position;
if (position == 1) {
return Fragment2.newInstance(position);
}
else if (position == 2){
return Fragment3.newInstance(position);
}
else if (position == 3){
return Fragment4.newInstance(position);
}
else
return Fragment1.newInstance(position);
}
[/syntax]Я показывал как, 23 строчка предпоследний кусок с кодомlamberto писал(а):почему то метод getApplicationContext() не определяется ....
пайджер реализован уже давно) видимо сбил смысли, извиняюсь...Код: Выделить всё
[syntax=java5] @Override public Fragment getItem(int position) { mTabsPosition = position; if (position == 1) { return Fragment2.newInstance(position); } else if (position == 2){ return Fragment3.newInstance(position); } else if (position == 3){ return Fragment4.newInstance(position); } else return Fragment1.newInstance(position); } [/syntax]
Вот никак не пойму как с MainActivity передать данные в Fragment4 если тупо в активити указать фрагмент для контейнера дак и создастся только 1 фрагмент. но данные перекидывает... а как, теперь передать в нужный мне фрагмент не понимаю. Щас сдохну уже сутками сижу читаю уже голова вскипает...