簡體   English   中英

通過底部導航欄將數據從活動傳遞到片段

[英]passing data from from an activiy to a fragment withn bottom navigation bar

我創建了一個帶有bottomNavigation欄的應用程序,該欄由5個片段組成。第二個片段(搜索片段)由1個帶有setOnClickListener的TextView組成,因此一旦被選中,布局活動將在頂部打開,其中包括一個ListView以允許用戶以選擇/單擊特定項目,因此稍后在此選定項目上的信息應顯示在(搜索片段)內的那個TextView上。

我嘗試使用Bundle從中傳遞數據,但是它不起作用。

- - - - - - - - - - - - - 主要活動 - - - - - - - - - - - - -----------------

public class MainActivity extends AppCompatActivity {



final Fragment f1 = new HomeFragment();
final Fragment f2 = new SearchFragment();
final Fragment f3 = new CameraFragment();
final Fragment f4 = new ChatFragment();
final Fragment f6 = new LogginFragment();

final FragmentManager fm = getSupportFragmentManager();
Fragment active = f1;



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


    //the fragment
    BottomNavigationViewEx bnve = (BottomNavigationViewEx) findViewById(R.id.bottom_navigation);

    bnve.enableAnimation(false);
    bnve.enableShiftingMode(false);
    bnve.enableItemShiftingMode(false);
    bnve.setOnNavigationItemSelectedListener(navListener);


    fm.beginTransaction().add(R.id.fragment_container, f6, "6").hide(f6).commit();
    //fm.beginTransaction().add(R.id.fragment_container, f5, "5").hide(f5).commit();
    fm.beginTransaction().add(R.id.fragment_container, f4, "4").hide(f4).commit();
    fm.beginTransaction().add(R.id.fragment_container, f3, "3").hide(f3).commit();
    fm.beginTransaction().add(R.id.fragment_container, f2, "2").hide(f2).commit();
    fm.beginTransaction().add(R.id.fragment_container, f1, "1").commit();

}


   public void MovetoSuccess(){

       startActivity(new Intent(this,SuccessActivity.class));
   }

  public void MovetoCategoiry(){

    startActivity(new Intent(this,Categories_Activity.class));
}


public BottomNavigationViewEx.OnNavigationItemSelectedListener navListener =
        new BottomNavigationViewEx.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {

                    case R.id.nav_home:
                        fm.beginTransaction().hide(active).show(f1).commit();
                        active = f1;
                        return true;

                    case R.id.nav_search:
                        fm.beginTransaction().hide(active).show(f2).commit();
                        active = f2;
                        return true;
                    case R.id.nav_camera:
                        fm.beginTransaction().hide(active).show(f3).commit();
                        active = f3;
                        return true;
                    case R.id.nav_chat:
                        fm.beginTransaction().hide(active).show(f4).commit();
                        active = f4;
                        return true;
                    case R.id.nav_account:
                            fm.beginTransaction().hide(active).show(f6).commit();
                            active = f6;
                            return true;

                }



                return false;

            }
        };




  }

-------------------------- --- SearchFragment -------------------- -------------

 public class SearchFragment extends Fragment  {


TextView Categories;


static boolean status = false;
String SelectedItem;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_search,container,false);


    Categories = (TextView) v.findViewById(R.id.categories);

     Bundle bundle = this.getArguments();

          if (bundle != null){

        String SelectedItem = bundle.getString("ss");
        Categories.setText(SelectedItem);
    }


    Categories.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((MainActivity)getActivity()).MovetoCategoiry();

        }
    });



    return v;
}

public Boolean getifItemselected(Boolean status){
    this.status=status;
    return true;

    }


 }

-------------------------- Categories_Activity ----------------------- ----------

public class Categories_Activity extends AppCompatActivity implements View.OnClickListener {

ImageView BacktoMainPage;
ListView subCate;
public String selectedItem;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab_subcategory);
    subCate = (ListView)findViewById(R.id.listview_subcate);
    BacktoMainPage = (ImageView)findViewById(R.id.BacktoMain);
    BacktoMainPage.setOnClickListener(this);
    final SearchFragment sf = new SearchFragment();

    subCate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             selectedItem = String.valueOf(parent.getItemAtPosition(position));

            Bundle bundle = new Bundle();
            bundle.putString("ss",selectedItem);
            sf.setArguments(bundle);

            finish();

        }
    });

 }


@Override
public void onClick(View v) {

    if (v == BacktoMainPage)
        finish();

         }


  }

如果用戶單擊listview的項,則可以使用靜態列表,可以將其添加到列表中並在該列表中使用任何片段,或者使setter getter的公共類設置和獲取值。

嘗試像這樣使用Singleton

public class DataHolder {
//design pattern to share arguments between fragments and activities
private static DataHolder dataHolder = null;

private DataHolder() {
}

public static DataHolder getInstance() {
    if (dataHolder == null)
    {
        dataHolder = new DataHolder();
    }
    return dataHolder;
}


private  String item;

public String getItem() {
    return item;
}

public void setItem(String item) {
    this.item = item;
}

}

因此,要保存您的項目,請使用:

DataHolder.getInstance().setItem(selectedItem);

並訪問您的數據使用:

DataHolder.getInstance().getItem();

這可以幫助您在片段和活動之間傳輸數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM