ورود

View Full Version : استفاده از هندلر برای خارج شدن از یک فرگمنت و رفتن به فرگمنت دیگر



sco1385
چهارشنبه 07 خرداد 1393, 17:53 عصر
با سلام

من در پروژه قبلی خودم که یک دراور بود از این هندلر استفاده می‌کردم که پس از پنج ثانیه از فرکمنت آغازین به فرگمنت دیگری منتقل می‌شد. این عبور بدون هیچ مشکلی انجام می‌گرفت.

هندلر :



Handler myhandler = new Handler();
myhandler.postDelayed(new Runnable() {
@Override
public void run() {
FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction t = fragmentManager.beginTransaction();
Fragment myFragment = new Fehrest_First();
t.replace(R.id.ViewPager_PlaceHolder, myFragment);
t.commit();
// finish();
}

}, 5*1000);


اما الان، همان کد را وقتی در پروژه ویوپیجر جدید خودم استفاده می‌کنم، روی این قسمت اخطار می‌دهد.



Fehrest_First();


اخطار این است:

Type mismatch: cannot convert from Fehrest_First to Fragment

چرا چنین است؟

من کد را از آن پروژه کپی و در اینجا پیست کردم.

ممنون

#root#
چهارشنبه 07 خرداد 1393, 19:58 عصر
مگر Fehrest_First یک fragment نیست؟
ببینید با جایگزینی این خط حل میشه :
Fehrest_First myFragment = new Fehrest_First();

sco1385
چهارشنبه 07 خرداد 1393, 20:34 عصر
چرا هست.

فرگمنت شماره 1 است، که فهرست را در آن قرار دادم. فرگمنت صفر صفحه‌ی ورودی برنامه است.

الان دیگر اخطار نمی‌دهد.

هم با جایگزینی شما اخطار نمی‌دهد. و هم با برداشتن getActivity(). از خط زیر:

FragmentManager fragmentManager = getActivity().getFragmentManager();

الان مشکل آن است که مثل قبل، باز همان مشکل اصلی وجود دارد. یعنی باز به جای رفتن به فرگمنت مربوطه، صفحه درجا سفید می‌شود.

هیچ اخطاری هم، چه در کد، و چه در زمان اجرا دیده نمی‌شود، و برنامه هم بسته نمی‌شود.

البته هندلر پس از پنج ثانیه عمل می‌کند، و بعد صفحه سفید می‌شود.

ممنون

#root#
چهارشنبه 07 خرداد 1393, 22:57 عصر
میشه کدهای این fragment مربوط که میخوایین با handler نشون داده بشه رو بزارین.

sco1385
چهارشنبه 07 خرداد 1393, 23:01 عصر
الان میگذارم.

اما فرقی نداره. هر فرگمنتی رو آدرس دادم صفحه سفید شد.

sco1385
چهارشنبه 07 خرداد 1393, 23:03 عصر
این هم فرگمنت مقصد:



import android.annotation.SuppressLint;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class Azadi extends Fragment {

WebView myWebView;
WebViewClient myWebViewClient;

// Every fragment must have a default empty constructor.
public Azadi(){}


@SuppressLint("SetJavaScriptEnabled")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// Get the view from azadi.xml
View rootView = inflater.inflate(R.layout.azadi, container, false);

// در حالت پُرتریت نگاه داشتن صفحه
getActivity().setRequestedOrientation(ActivityInfo .SCREEN_ORIENTATION_PORTRAIT);

// ----------

// ساخت آبجکت وب ویو
myWebView = (WebView) rootView.findViewById(R.id.webView_ShariatiShenasi );

// ساخت آبجکت وب ستینگ
WebSettings myWebSettings = myWebView.getSettings();

// فعال کردن جاوا اسکریپت
myWebSettings.setJavaScriptEnabled(true);

// ایجاد دکمه زوم / اختیاری
myWebSettings.setBuiltInZoomControls(true);

myWebSettings.setDefaultTextEncodingName("UTF-8");

// آدرس فایل مورد نظر
myWebView.loadUrl("file:///android_asset/html/azadi01.html");

// ----------

// ساخت آبجکت وب‌ویو کلاینت، و نسبت دادن آن به وب‌ویو
// در جهت اوررایت کردن دیفالت وب‌ویو، و اجبار وب‌ویو برای مرور سایت‌های غیرخودی
// Force links and redirects to open in the WebView instead of in a browser.
/*myWebView.setWebViewClient(new WebViewClient());

@SuppressWarnings("unused")
class MyWebViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.shandel.info")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}*/


// ----------

return rootView;

}// end of on create.

// ----------

}