آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

قابلیت برگشت پذیری از فرگمنت اجرا شده به صفحه main activity با استفاده از دکمه های برگشت سخت افزاری ...

MasterSPYware  8 سال پیش  6 سال پیش
+1 0

سلام.

من یک برنامه دارم که از طریق منو به فرگمنت هایی که تعریف کردم داخل میشم.

اما وقتی میخوام دکمه برگشت دستگاهمو بزنم از برنامه خارج میشه.

من میخوام دکمه back دستگاه خاصیت برگشت بگیره.

0 0
منظورتون اینه که به اکتیویتی قبلی بره؟ (8 سال پیش)
+1 0
زیاد حضور ذهن ندارم اما فک کنم موقع رفتن به فرگمنت جدید باید متد addToBackStack(null); رو روش اجرا کنید تا بتونین با دکمه بک به فرگمنت جدید برگردین (8 سال پیش)
0 0
mohsen.talk منظورتون اینه که به اکتیویتی قبلی بره؟ ( در 9 دقیقه پیش ) بله(دقیقا) اما با کلیدهای سخت افزاری اندروید(یا همان نوار وظیفه مشکی رنگ) (8 سال پیش)
0 0
متد ان بک پرست رو صدا بزنید (8 سال پیش)
0 0
داداش آخر همین صفحه کدفرگمنت منو و فرگمنت مقصد وجود داره-اگه میشه خودتون انجام بدید یه هفتست گرفتار همین مشکلم (8 سال پیش)
 برای این سوال 23 پاسخ وجود دارد.
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

منظورتون اینه که به اکتیویتی قبلی بره؟ ( در 9 دقیقه پیش ) بله(دقیقا) اما با کلیدهای سخت افزاری اندروید(یا همان نوار وظیفه مشکی رنگ)

پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

شرلوک جان اسپم زدی

پاسخ به سوال 
Amir  8 سال پیش
0 0

متد onBackPressed رو توی اکتیویتی اورراید کنید یا کد زیر رو توی اکتیویتی کپی کنید:

@Override
public void onBackPressed() {
// your Code

super.onBackPressed();
}

حالا شما دکمه ی برگشت رو در اختیار دارید و می تونید به جای your code مثلا بگید که فرگمنت remove بشه.

پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

من این کد رو نمیتونم داخل فرگمنت استفاده کنم خب

این کد فرگمنت منه:

 package sliding_tabhost;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import soft.kaziwa.com.nab.R;
public class Tab1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.activity_search,container,false);
WebView webView=(WebView) v.findViewById(R.id.webView11);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://google.com");
return v;
}
}

اگه میشه توی این فرگمنت تعریف کن

پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

این فرگمنتیه که داخلشم و میخوام به فرگمنت قبلی یا اکتیویتی صفحه اول با استفاده از دکمه بک برگردم

 

پاسخ به سوال 
مسعود فرمانی  8 سال پیش
+1 0

اگه مجموعه فرگمنت هایی که با استفاده از منو اونهارو نمایش میدید رو در یک اکتیویتی جدید قرار دادید میتونید این اکتیویتی رو در متد onBackPressed کلا ببندیدش...

 @Override
public void onBackPressed() {
this.finish();
}

اگه میخواید با زدن دکمه بک به فرگمنت هایی که قبلا نمایش داده شدن برگردید ، در کلاس اکتیویتی (یا فرگمنت) پدرِ این فرگمنت ها که توش FragmentManager و FragmentTransaction رو ساختید ، متد زیر رو روی fragmentTransaction صدا بزنید :

 ft.addTobackStack(null);
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

دوست من این فرگمنت من در داخل کلاس اصلی برناممه

 Tab1 fragment1 = new Tab1();
android.support.v4.app.FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
fragmentTransaction1.replace(R.id.frame, fragment1);
fragmentTransaction1.commit();
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

دوست من این فرگمنت من در داخل کلاس اصلی برناممه

 Tab1 fragment1 = new Tab1();
                            android.support.v4.app.FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
                            fragmentTransaction1.replace(R.id.frame, fragment1);
                            fragmentTransaction1.commit();

اینم کد فرگمنتم که از طریق متد بالا واردش میشه

 package sliding_tabhost;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import soft.kaziwa.com.nab.R;
publicclassTab1extendsFragment{
@Override
publicView onCreateView(LayoutInflater inflater,@NullableViewGroup container,@NullableBundle savedInstanceState){
View v =inflater.inflate(R.layout.activity_search,container,false);
WebView webView=(WebView) v.findViewById(R.id.webView11);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(newWebViewClient());
webView.loadUrl("http://google.com");
return v;
}
}

اگه میشه روی این کدها توضیح بده

0 0
همونطور که در پاسخ بالاتر گفتم با توجه به تکه کدی که نوشتید ، متد addToBackStack رو با پارامتر ارسالی null روی آبجکت fragmentTransaction1 صدا بزنید با اینکار به ازای هر بار زدن دکمه back ، تمامیِ فرگمنت هایی که قبل از فرگمنت حاضر ساخته شده بودند و با فرگمنت بعد از خودشون جایگزین شدن با ترتیب معکوس دوباره ظاهر میشن....امیدوارم این همونی باشه که میخواستید بهش برسید... (8 سال پیش)
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

0 0
به جای ft اینو بنویس fragmentTransaction1 من روز اولی که سوال پرسیدین جوابتونو گفتم ولی شما توجهی نکردین (8 سال پیش)
0 0
فک کنم باید یک خطم ببری بالاتر و قبل از commit این متد رو صدا بزنی (8 سال پیش)
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

0 0
لطفا به جای پاسخ جدید از نظر جدید استفاده کنید تا نظم تاپیکتون بهم نریزه. addToBackStack رو باید با B بزرگ بنویسین (8 سال پیش)
0 0
اضافه کردم عزیزجان-نشد این لینک اپ من نصب کن خودت ببین لینک (8 سال پیش)
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

الان کد من ایراد داره؟؟؟

case R.id.search:
ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
if (netInfo == null) {
Toast.makeText(getApplicationContext(), "اوه!!اینترنت نداری!!!", Toast.LENGTH_LONG).show();
}
else {
Tab1 fragment1 = new Tab1();
android.support.v4.app.FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
fragmentTransaction1.replace(R.id.frame, fragment1);
fragmentTransaction1.addToBackStack(null);
fragmentTransaction1.commit();

}
return true;

بازم دکمه برگشت گوشیمو میزنم میاد بیرون

پاسخ به سوال 
Hajhosseini  8 سال پیش
+1 0

توی این حالت با کلیک روی بک از اپلیکیشن خارج میشه:

 getSupportFragmentManager().beginTransaction()
                .add(R.id.container,new WalkThroughFragment(),"WALK_THROUGH_FRAGMENT")
                .commit();

توی این حالت فرگمنت بسته میشه و اکتیویتی زیرش نمایان میشه:

 getSupportFragmentManager().beginTransaction()
                .add(R.id.container,new WalkThroughFragment(),"WALK_THROUGH_FRAGMENT")
                .addToBackStack("WALK_THROUGH_FRAGMENT")
                .commit();

توجه: هیچ وقت اون تگ هایی که من پر کردم رو خالی یا null نذارید، اون بنده خدایی که اینارو نوشته حتما یه دلیلی داشته. در صورتی که بخواید بعدا به اون فرگمنت دسترسی داشته باشید: شامل دسترسی به متدها، حذف فرگمنت، حذف از حافظه یا ...، میتونید از اون تگ استفاده کنید.

قابل توجه دوستانی که گفتن از onBackPressed استفاده کن:
متد onBackPressed فقط توی اکتیویتی کار میکنه، میتونه کاربردای زیادی توی مدیریت فرگمنت ها داشته باشه ولی روش استفادش به این صورته که شما توی اکتیویتی که فرگمنت توی اون ساخته شده این متد رو مینویسی، بعد باید تشخیص بدی که الان توی کدوم فرگمنتی و باید یک اینستنس از اون فرگمنتی که توش هستی بسازی و به متدهاش دسترسی پیدا کنی. هیچ وقت نمیتونید onBackPressed رو توی فرگنمت داشته باشید مگر اینکه لیستنر یا Broadcast خودتون رو براش بسازید.

پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

ممنون دوست من-خیلی توضیحات کاملی بود-اما بخدا من خیلی آماتورم.این کدی که دادی رو گذاشتم.اما نمیدونم چیکار باید بکنم!!!

این عکس اندروید استودیو-کد ها بالای توضیحات شما هم تایپ شده.فقط تورو خدا کمکم کنین تا راه بیفتم-توو این روزای عزیز دعاتون میکنم

پاسخ به سوال 
Hajhosseini  8 سال پیش
+1 0

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

Tab1 fragment1 = new Tab1();
android.support.v4.app.FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
fragmentTransaction1.replace(R.id.frame, fragment1);
fragmentTransaction1.addToBackStack(null);
fragmentTransaction1.commit();

رو به کد زیر تغییر بدید

 getSupportFragmentManager().beginTransaction()
                .add(R.id.frame,new Tab1(),"TAB1_FRAGMENT")
                .addToBackStack("TAB1_FRAGMENT")
                .commit();
0 0
وظیفه تگ TAB1_FRAGMENT چیه ؟ (6 سال پیش)
پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

این چه طلسمیه.نشد بازم

 case R.id.search:
ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
if (netInfo == null) {
Toast.makeText(getApplicationContext(), "اوه!!اینترنت نداری!!!", Toast.LENGTH_LONG).show();
}
else {
getSupportFragmentManager().beginTransaction()
.add(R.id.frame,new Tab1(),"TAB1_FRAGMENT")
.addToBackStack("TAB1_FRAGMENT")
.commit();
}
return true;
0 0
این ویدئو رو ببین متوجه میشی منظورمو البته موس نمایش داده نمیشه.هروقت هشدار خروج ظاهر میشه به معنای فشردن دکمه بک هستش لینک (8 سال پیش)
0 0
متوجه شدی؟؟؟ (8 سال پیش)
0 0
? (8 سال پیش)
0 0
سید جان پاسخی ندادی؟ (8 سال پیش)
پاسخ به سوال 
Hajhosseini  8 سال پیش
+3 0

دوست عزیز فکر کنم منطق قضیه یکم گنگه برات هنوز.
با اضافه کردن addToBackStack شما قابلیت های زیر رو به فرگمنت اضافه میکنی:
حساس شدن به کلید بک گوشی. (بدین معنی که اگر فرگمنت A رو باز کنی بعد به فرگمنت B بری و بعد دکمه بک رو بزنی، فرگمنت B بسته میشه و فرگمنت A نمایش داده میشه)
اضافه شدن به مموری و قرارگیری در BackStack. (برای هندل کردن فرگمنت و استفاده ازش یا پیدا کردنش توی فرگمنت های دیگر استفاده داره)
و قابلیت های دیگه که به این پست مربوط نمیشن.

ولی اگر addToBackStack نزنی و تگ ست نکنی چه اتفاقی می‌ افته؟
اگر فرگمنت A رو باز کنی بعد به فرگمنت B بری و دکمه بک رو بزنی، اکتیویتی بسته میشه (و تمام فرگمنت های درونش). اگر فرگمنت A رو addToBackStack نزنی و فرگمنت B رو بزنی. با کلیک روی بک فرگمنت B بسته میشه و فرگمنت A میمونه.

روشی که میتونید انجام بدید:
به صورتی که بالا گفتم. اولین فرگمنتی که توی اکتیویتی باز میکنی رو addToBackStack ست نکنی براش ولی تمام فرگمنت های دیگه رو ست کنی. با اینکار از هر فرگمنتی که دکمه بک رو بزنی همون اولی نمایش داده میشه. اولی رو ست نمیکنیم چون اگر اون بسته بشه، اکتیویتی هم باید بسته بشه.

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

 Fragment fragment = getSupportFragmentManager().findFragmentByTag("FRAGMENT_A");
        if (fragment.getTag() != null && !fragment.isHidden() && fragment.isVisible()) {
            // Toast 
            // exit app if its second time that user click on Back Button
        }
 

من سید نیستم دوست عزیز.
موفق باشی.

پاسخ به سوال 
MasterSPYware  8 سال پیش
+1 0

هرچی ازت تشکر کنم کمه بخدا.

دست مریزاد-ینی شیر مادرت حلالت الحق که استادی داداش

یه هفته بود فلج بودم.بال درآوردم رفیق

درسته کد توست برگشتمو برداشتم درست شد

این کد برگشت منه

 private boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "جهت خروج مجدد دکمه بازگشت را بفشارید",
Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
0 0
اون کدی که لطف کردی و دادی چطور توی این کد بگنجونم؟ (8 سال پیش)
پاسخ به سوال 
Hajhosseini  8 سال پیش
+2 0

اون بالاییارو پاک کن اینارو بنویس

 @Override
    public void onBackPressed() {
        Fragment fragment = getSupportFragmentManager().findFragmentByTag("FRAGMENT_A");
        if (fragment.getTag() != null && !fragment.isHidden() && fragment.isVisible()) {
            exitApplication();
        } else {
            super.onBackPressed();
        }
    }

    private boolean doubleBackToExitPressedOnce;
    private void exitApplication() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Click To Exit", Toast.LENGTH_SHORT).show();
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 5000);
    }

فقط من نوشتم FRAGMENT_A شما باید تگی که زمان ساخت فرگمنت اولت بهش میدی رو بزنی.
برای تشکر هم لایک کافیه دوست من ;)

پاسخ به سوال 
MasterSPYware  8 سال پیش
0 0

ببین من این کد رو داخل اگتیویتی اصلیم گذاشته بودم-توضیحات شما کمی برای من گیج کنندست

جای این کد رو باید عوض کنم؟؟؟

یا برای هرگزینه یک کد خروج تعریف کنم؟

 

پاسخ به سوال 
Hajhosseini  8 سال پیش
+3 0

این کد های زیر رو پاک کن

  private boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "جهت خروج مجدد دکمه بازگشت را بفشارید",
            Toast.LENGTH_SHORT).show();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;
        }
    }, 2000);
}

و اینارو جایگزین کن

  @Override
    public void onBackPressed() {
        Fragment fragment = getSupportFragmentManager().findFragmentByTag("FRAGMENT_A");
        if (fragment.getTag() != null && !fragment.isHidden() && fragment.isVisible()) {
            exitApplication();
        } else {
            super.onBackPressed();
        }
    }

    private boolean doubleBackToExitPressedOnce;
    private void exitApplication() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "Click To Exit", Toast.LENGTH_SHORT).show();
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                doubleBackToExitPressedOnce = false;
            }
        }, 5000);
    }
+1 0
علی جان واقعا ممنون عالی بود (7 سال پیش)
0 0
سلام وقتی دکمه بک رو که میزنم به تب قبلی برمیگرده ولی مجدد میخام به تب قبلیه قبلی برگردم حتما باید ۲ بار بک رو بزنم؟ برای مثال من 5 تا تب دارم (A,B,C,D,E,F) از تب A میرم به تب B و از تب B به تب C میرم و وقتی دکمه بک رو میزنم به تب B برمیگرده ولی وقتی دوباره از تب B به تب A میخام برگردم باید حتما 2 بار دکمه بک رو بزنم.میدونین مشکلم کجاست؟ در ضمن از Bottombar Navigition استفاده میکنم.ممنون میشم راهنمایی کنین. (7 سال پیش)
پاسخ به سوال 
mahdiFar77  7 سال پیش
0 0

سلام وقتی دکمه بک رو که میزنم به تب قبلی برمیگرده ولی مجدد میخام به تب قبلیه قبلی برگردم حتما باید ۲ بار بک رو بزنم؟ برای مثال من 5 تا تب دارم (A,B,C,D,E,F) از تب A میرم به تب B و از تب B به تب C میرم و وقتی دکمه بک رو میزنم به تب B برمیگرده ولی وقتی دوباره از تب B به تب A میخام برگردم باید حتما 2 بار دکمه بک رو بزنم.میدونین مشکلم کجاست؟ در ضمن از Bottombar Navigition استفاده میکنم.ممنون میشم راهنمایی کنین

+1 0
سلام. نمونه کدهاتون رو قرار بدید. برای حل این مشکلات باید توی متد onBackPressed دیباگ کنید ببینید چه اتفاقی میوفته. باز با سورس هاتون شاید بشه کمک کرد. (7 سال پیش)
پاسخ به سوال 
mahdiFar77  7 سال پیش
+1 0

آقای حاج حسینی ممنون و اینم کدم

public class ActivityMain extends ActivityEnhanced {
FragmentHome fragment1;
FragmentMap fragment2;
FragmentGram fragment3;
FragmentCard fragment4;
FragmentUser fragment5;
ViewGroup frameLayout;
public static FragmentManager fragmentManager;
public static BottomBar bottomBar;

@Override
protected void onResume() {
bottomBar.selectTabAtPosition(G.bottomBarPosition);
super.onResume();
}

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

frameLayout = (ViewGroup) findViewById(R.id.frameLayout);
fragment1 = new FragmentHome();
fragment2 = new FragmentMap();
fragment3 = new FragmentGram();
fragment4 = new FragmentCard();
fragment5 = new FragmentUser();

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.frameLayout, fragment1);
transaction.commit();

// BottomBarTab cardCount = bottomBar.getTabWithId(R.id.tab_card);
// cardCount.setBadgeCount(5);
// Log.d(G.TAG,"cardin");

bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (tabId) {
case R.id.tab_home:
transaction.replace(R.id.frameLayout, fragment1);
transaction.addToBackStack("tab_home");
transaction.commit();
break;

case R.id.tab_map:
transaction.replace(R.id.frameLayout, fragment2);
transaction.addToBackStack("tab_map");
transaction.commit();
break;

case R.id.tab_gram:
transaction.replace(R.id.frameLayout, fragment3);
transaction.addToBackStack("tab_gram");
transaction.commit();
break;

case R.id.tab_card:
transaction.replace(R.id.frameLayout, fragment4);
transaction.addToBackStack("tab_card");
transaction.commit();
break;

case R.id.tab_user:
transaction.replace(R.id.frameLayout, fragment5);
transaction.addToBackStack("tab_user");
transaction.commit();
break;

}
}
});
}
}
 
0 0
چند روزی نبودم. خوب برادر شما یک بار داری فرگمنت Home رو ست میکنی، بعد توی onTabSelected هم یک بار ست میشه دوباره. یه حرکتی بکن. یه لاگ بنداز قبل از هر کامیتی که توی این کدا داری. اونوقت میبینی که 2 بار کال میشه. دیباگ کنی هم که خیلی بهتره. (7 سال پیش)
0 0
برای حل این مشکل یه مقدار boolean بالای اکتیویتی تعریف کن که مقدارش true باشه. اسمشم بذار fromLoad. توی متد setOnTabSelectListener اگر fromLoad = true بود addToBackStack نزن و اگر بود بزن. اون بار اول که home رو ست میکنی تاثیری توی روند نداره فقط مموری رو اشغال میکنه، چون دیفالت همیشه setOnTabSelectListener کال میشه و اولین فرگمنت ست میشه. و همونجوری که خودتم میدونی، بار اول نباید addToBackStack براش ست شه. (7 سال پیش)
0 0
این یه خط رو هم برداری حله transaction.addToBackStack("tab_home"); D: چون شما وقتی توی هوم هستی میخوای بسته شه دیگه؟ پس بار اول و دوم نداره. برش دار که هربار هوم بودی بسته شه با یه بک. (7 سال پیش)
0 0
اون مشکلم رو حل کردم یه مشکل دیگه دارم اینه که وقتی تب خاصی رو انتخاب میکنم رنگش عوض میشه و هیچ مشکلی نداره ولی وقتی با دکمه بک گوشی به تب قبلی برمیگردم رنگش عوض نمیشه (7 سال پیش)
0 0
چون داری replace میکنی، فکر کنم بتونی از onResume توی فرگمنت ها استفاده کنی. یه تست بزن کد تغییر رنگ رو توی onResume بنویس ببین کار میکنه یا نه. (7 سال پیش)
0 0
bottombar.setActiveTabColor رو هم زدم ولی رنگش تغییر نکرد (7 سال پیش)
0 0
مگه bottombar توی اکتیویتی تعریف نشده؟ ساختارتو چجوری چیدی؟ یه عکس با توضیحات که چه ویویی مال اکتیویتی و فرگمنته اضافه کن بهتر بتونیم کمک کنیم. (7 سال پیش)
پاسخ به سوال 
mahdiFar77  7 سال پیش
0 0

ا

ین کد اکتیویتی مینم هست که از کتابخانه  com.roughike.bottombar.BottomBar استفاده میکنم

 
public class ActivityMain extends ActivityEnhanced {
FragmentHome fragment1;
FragmentMap fragment2;
FragmentGram fragment3;
FragmentCard fragment4;
FragmentUser fragment5;
ViewGroup frameLayout;
public static FragmentManager fragmentManager;
public static BottomBar bottomBar;

@Override
protected void onResume() {
bottomBar.selectTabAtPosition(G.bottomBarPosition);
super.onResume();
}

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

frameLayout = (ViewGroup) findViewById(R.id.frameLayout);
fragment1 = new FragmentHome();
fragment2 = new FragmentMap();
fragment3 = new FragmentGram();
fragment4 = new FragmentCard();
fragment5 = new FragmentUser();
bottomBar = (BottomBar) findViewById(R.id.bottomBar);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.frameLayout, fragment1);
transaction.commit();

// BottomBarTab cardCount = bottomBar.getTabWithId(R.id.tab_card);
// cardCount.setBadgeCount(5);
// Log.d(G.TAG,"cardin");

bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (tabId) {
case R.id.tab_home:
G.bottomBarPosition=0;
transaction.replace(R.id.frameLayout, fragment1);
transaction.addToBackStack("tab_home");
transaction.commit();
break;

case R.id.tab_map:
G.bottomBarPosition=1;
transaction.replace(R.id.frameLayout, fragment2);
transaction.addToBackStack("tab_map");
transaction.commit();
break;

case R.id.tab_gram:
G.bottomBarPosition=2;
transaction.replace(R.id.frameLayout, fragment3);
transaction.addToBackStack("tab_gram");
transaction.commit();
break;

case R.id.tab_card:
G.bottomBarPosition=3;
transaction.replace(R.id.frameLayout, fragment4);
transaction.addToBackStack("tab_card");
transaction.commit();
break;

case R.id.tab_user:
G.bottomBarPosition=4;
transaction.replace(R.id.frameLayout, fragment5);
transaction.addToBackStack("tab_user");
transaction.commit();
break;

}
}
});
}

}

اینم نمونه فرگمن ها است
public class FragmentMap extends Fragment {

View layout;
public FragmentMap() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ActivityMain.bottomBar.selectTabAtPosition(1);
layout=inflater.inflate(R.layout.fragment_map, container, false);

Button button=(Button)layout.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(G.TAG,"cookie:");
}
});

return layout;
}
+1 0
مهدی جان باید بری توی سورس این کتابخونه ای که استفاده میکنی ببینی از چی استفاده کرده. اگر از ویو پیجر استفاده کرده باشه یا چند تا فرگمنتو توی حافظه نگه داره کارت سخت میشه، ولی به احتمال زیاد اینطور نیست. باز به نظر من توی onResume دیباگ کن ببین اصن میاد یا نه. ولی من موندم که چرا باید از کتابخونه استفاده کنی، خیلی راحت میتونستی خودت بسازیش! (7 سال پیش)
0 0
نمونه دارین ازش بتونم کمک بگیرم؟ (7 سال پیش)
0 0
ببین خیلی ساده میتونی اینارو توی اکتیویتی تعریف کنی. زمانی که هرکدوم کلیک میشه، رنگ همه رو عادی کن بعد رنگ اونی که انتخاب شده رو رنگی کن. اگر دکمه بک کلیک شد، ببین اونی که رنگیه کدومه، اگر Main بود که از اپ خارج شو، اگر نبود که برو مین و مین رو رنگی کن. به همین راحتی. نیازی به کتابخانه هم نداری. (7 سال پیش)
0 0
باشه ممنون بابت زاهنماییتون تست میکنم (7 سال پیش)
0 0
یه سوال دیگه آقای حاج حسینی: تو کدوم قسمت از فرگمنت باید کدهامو بنویسیم که یکبار اجرا بشه و هر بار که کاربر تو تب کلیک میکنه دوباره ساخته نشه برای مثال تو تب اول ده آیتم اسکرول کرده و به تب سوم میره و دوباره تب اول رو انتخاب میکنه میخام اسکرول به اول نیاد .ممنون (7 سال پیش)
0 0
اگر تب ها 3 تاست. میتونی همرو توی حافظه نگه داری. خوده ویو پیجر متدی داره که بهش میگی چند تا فرگمنتو لود کنه (اسمش یادم نیست سرچ کنید). اگر تعداد زیاده، میشه میزان اسکرول رو به فرگمنت پاس داد یا یه جا ذخیره کرده توی فرگمنت دوباره خوند. از متدای استاتیکم میشه استفاده کرد که پیشنهاد نمیکنم. حتی میشه یک کلاس کنترلر ساخت که دیتا رو هندل کنه و فرگمنت فقط نقش نمایش روی ویو هارو داشته باشه. در کل خیلی راه ها هست ولی من همون اولی رو پیشنهاد میکنم اگر تعداد فرگمنت ها کمه. (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .