gpt4 book ai didi

java - 将数据从 Activity 传递到带有底部导航栏的 fragment

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:33 24 4
gpt4 key购买 nike

我创建了一个带有底部导航栏的应用程序,由 5 个 fragment 组成。第二个 fragment (搜索 fragment )由 1 个带有 setOnClickListener 的 TextView 组成,因此一旦它被点击,布局 Activity 将在顶部打开,其中包括一个 ListView 以允许用户选择/单击特定项目,因此稍后此选定项目信息应显示在(搜索 fragment )内的 TextView 上。

我尝试使用 Bundle 传递数据,但不起作用。

--------------------------主要 Activity ----------------------------------------

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;

}


}

--------------------------类别_ 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();

}


}

最佳答案

尝试使用这样的单例

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();

这可以帮助您在 fragment 和 Activity 之间传输数据

关于java - 将数据从 Activity 传递到带有底部导航栏的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com