ورود

View Full Version : مشکل با onActivityResult



ghader62
شنبه 09 فروردین 1393, 08:53 صبح
سلام دوستان
من از یک TabActivity در برنامه ام استفاده کردم یکی از تب های برنامه هم لیست ویویی وجود دارد که از نت دیتا را دانلود و مصرف میکند
من برای کلیک روی هر آیتم از این لیست از startActivityForResult استفاده کردم که با این ، به اکتیویتی هدایت میشه که چندین آیتم رو به نمایش میزاره و با زدن setResult ،آیتم انتخاب شده رو به اکتیویتی اصلی برمیگردونه
حالا مشکل من در قسمت آخر یعنی برگرداندن آیتم انتخاب شده به اکتیویتی اصلی هستش که با زدن دکمه setResult اصلا به اکتیویتی اصلی هدایت نمیشه
من این کلاس TabActivity رو از یکجایی ور داشتم و زیاد توش دقیق نشدم ولی مطمئنم که ایراد کارم در این تب اکتیویتی هستش چون نمونه کلاسیک tabActivity رو در جای دیگری استفاده کردم که درست جواب گرفتم
دوستان اگر چیزی به ذهنشون میرسه ممنون میشم کمکم کنند

کلاس TabActivity
public class IrTabActivity extends TabActivity {

private ViewPager mPager;
private List<View> listViews;
private ImageView cursor;
private RelativeLayout t1, t2, t3;
private int offset = 0;
private int currIndex = 0;
private int bmpW;
private TabHost mTabHost;
private LocalActivityManager manager = null;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainta);

mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("A").setIndicator(
"").setContent(
new Intent(this, IrNewActivity.class)));
mTabHost.addTab(mTabHost.newTabSpec("B").setIndicator(
"").setContent(
new Intent(this, IrMaxActivity.class)));
mTabHost.addTab(mTabHost.newTabSpec("C").setIndicator(
"").setContent(
new Intent(this, FirstCategory.class)));
mTabHost.setCurrentTab(0);

manager = new LocalActivityManager(this, true);
manager.dispatchCreate(savedInstanceState);

InitImageView();
InitTextView();
InitViewPager();
}



private void InitTextView() {
t1 = (RelativeLayout) findViewById(R.id.SearchCardButton);
t2 = (RelativeLayout) findViewById(R.id.CategoryCardButton);
t3 = (RelativeLayout) findViewById(R.id.PublishCardButton);

t1.setOnClickListener(new MyOnClickListener(0));
t2.setOnClickListener(new MyOnClickListener(1));
t3.setOnClickListener(new MyOnClickListener(2));
}



private void InitViewPager() {
mPager = (ViewPager) findViewById(R.id.vPager);
listViews = new ArrayList<View>();
Intent intent = new Intent(this, IrNewActivity.class);
listViews.add(getView("Black", intent));
Intent intent2 = new Intent(this, IrMaxActivity.class);
listViews.add(getView("Gray", intent2));
Intent intent3 = new Intent(this, FirstCategory.class);
listViews.add(getView("White", intent3));

mPager.setAdapter(new MyPagerAdapter(listViews));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}



private View getView(String id, Intent intent) {
return manager.startActivity(id, intent).getDecorView();
}



private void InitImageView() {
cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics( dm);
int screenW = dm.widthPixels;
offset = (screenW / 3 - bmpW) / 2;
Matrix matrix = new Matrix();
matrix.postTranslate(offset, 0);
cursor.setImageMatrix(matrix);
}



@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(IrTabActivity.this, Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}

public class MyPagerAdapter extends PagerAdapter {

public List<View> mListViews;



public MyPagerAdapter(List<View> mListViews) {
this.mListViews = mListViews;
}



@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(mListViews.get(arg1));
}



@Override
public void finishUpdate(View arg0) {}



@Override
public int getCount() {
return mListViews.size();
}



@Override
public Object instantiateItem(View arg0, int arg1) {
((ViewPager) arg0).addView(mListViews.get(arg1), 0);
return mListViews.get(arg1);
}



@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
}



@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}



@Override
public Parcelable saveState() {
return null;
}



@Override
public void startUpdate(View arg0) {}
}

public class MyOnClickListener implements View.OnClickListener {

private int index = 0;



public MyOnClickListener(int i) {
index = i;
}



@Override
public void onClick(View v) {
mPager.setCurrentItem(index);
}
};

public class MyOnPageChangeListener implements OnPageChangeListener {

int one = offset * 2 + bmpW;
int two = one * 2;
int three = one * 3;



@Override
public void onPageSelected(int arg0) {
Animation animation = null;
switch (arg0) {
case 0:
if (currIndex == 1) {
animation = new TranslateAnimation(one, 0, 0, 0);
} else if (currIndex == 2) {
animation = new TranslateAnimation(two, 0, 0, 0);
}
break;
case 1:
if (currIndex == 0) {
animation = new TranslateAnimation(offset, one, 0, 0);
} else if (currIndex == 2) {
animation = new TranslateAnimation(two, one, 0, 0);
}
break;
case 2:
if (currIndex == 0) {
animation = new TranslateAnimation(offset, two, 0, 0);
} else if (currIndex == 1) {
animation = new TranslateAnimation(one, two, 0, 0);
}
break;
}
currIndex = arg0;
animation.setFillAfter(true);
animation.setDuration(300);
cursor.startAnimation(animation);
}



@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}



@Override
public void onPageScrollStateChanged(int arg0) {}
}


من دیتای IrNewActivity رو از نت میگیرم که بدرستی دیتا دریافت میشه وبا کلیک روی هر آیتم متد زیر اجرا میشه
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Intent intent = new Intent(IrMaxActivity.this, ClickHelper.class);
intent.putExtra(ClickHelper.POSITION, position);
startActivityForResult(intent, ClickHelper.REQUESTCODE);
}

و در کلاس ClickHelper با کلیک روی آیتم متد زیر اجرا میشه
btn_active.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = getIntent();
intent.putExtra(CLICK, 1);
setResult(REQUESTCODE, intent);
finish();
}
});
و در اکتیویتی اصلی که همان IrNewActivityاصلی هستش اصلا به متد زیر هدایت نمیشه
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);}

smemamian
شنبه 09 فروردین 1393, 10:30 صبح
سلام.

شما نام Activityرو در manifest.xml تعریف کردید ؟
خطایی دریافت می کنید ؟ اگه نه یه Logدر قسمت
onActivityResult بذارید ببینید خروجی میده یا نه

ghader62
شنبه 09 فروردین 1393, 11:53 صبح
smemamian (http://barnamenevis.org/member.php?249007-smemamian) سلام
بله نام اکتیویتی در منیفست تعریف شده
هیچ خطا و اروری با کلیک و پس دادن setResult بوجود نمیاد
در onActivityResult هم log قرار دادم که اصلا به این متد وارد نمیشه که بخواد لوگ رو نشون بده بعد از برگشت فقط متد onresult کلاسTabactivity رو فراخوانی میکنه

ghader62
شنبه 09 فروردین 1393, 12:12 عصر
دوستان یک مسئله ای هم که وجود داره اینه که در داخل کلاس TabActivity اکتیویتی اول در خط 23 دوبار اجرا میشه بعد از قرار دادن لوگ متوجه شدم
آیا این میتونه ایراد باشه ؟؟
چون دیتا دانلود میشه چیکار میتونم بکنم که این دیتا یکبار دانلود بشه؟؟

smemamian
شنبه 09 فروردین 1393, 14:41 عصر
این رو یک بار تست کن... :متفکر:
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startActivityForResult(...);

اگه نشد یک بار با this.startActivityForResult(..) تست کن

ghader62
شنبه 09 فروردین 1393, 16:32 عصر
مشکل من با راهنمایی دوست عزیزsmemamian (http://barnamenevis.org/member.php?249007-smemamian) برطرف شد
فقط یه توضیح مختصر در مورد راه حل این دوستمان
این قسمت را در IrNewActivity وارد میکنیم ولی onresultListener رو باید در داخل TabActivity وارد نمایید

TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startActivityForResult(...);



بازم ممنون

smemamian
شنبه 09 فروردین 1393, 19:23 عصر
اگر مایل بودید کل پروژتون رو اینجا بذارید. اگر هم نه پیغام شخصی کنید
بعد من راه حل مشکل رو اینجا میگم :متفکر:

نیاز به آزمون خطا دارم :گیج:
------
اگر هم نه که امیدوارم بقیه دوستان بتونن مشکل رو پیدا کنند :متفکر: