gpt4 book ai didi

java - 当只有一个 fragment 可见时, fragment 之间进行通信

转载 作者:行者123 更新时间:2023-12-01 13:24:01 26 4
gpt4 key购买 nike

我在动态更改的 fragment 之间进行通信时遇到问题,如果 fragment 全部可见,我设法使用界面系统进行通信,但是当我单独查看它们时,我无法使用它们的操作,因为它们没有还没有标签,有什么想法吗?

主要 Activity

公共(public)类 MainActivity 扩展 FragmentActivity 实现 OnClickListener、Communicator {

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

if (isSingleFragment()) {

Button btn_color = (Button) findViewById(R.id.button_color);
Button btn_text = (Button) findViewById(R.id.button_text);
Button btn_list = (Button) findViewById(R.id.button_list);
btn_color.setOnClickListener(this);
btn_list.setOnClickListener(this);
btn_text.setOnClickListener(this);

singleFragActions();

} else {

doubleFragActions();
}


// some more stuff happens

@Override
public void apply(String data) {

Log.d("data", data+"");
FragmentManager fm = getSupportFragmentManager();
Frag_list frag_list = (Frag_list) fm.findFragmentByTag("list");
//i cannot use id because the fragment in
//MainActivity are in a layout and are enterd dynamicaly

frag_list.addItem(data);

}

这里有三个 fragment ,当在小屏幕上时,会显示 ,并且顶部的三个按钮可以更改它们的排列,如果在平板电脑上,所有三个都会显示,这是界面

public interface Communicator {

public void apply(String data);

}

frag_text(第一个 fragment )

public class Frag_text extends Fragment implements OnClickListener{


Communicator comm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// stuff
return view;

}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);

comm = (Communicator) getActivity();
}
@Override
public void onClick(View v) {


EditText input = (EditText) getView().findViewById(R.id.frag_text_edit);
TextView output = (TextView) getView().findViewById(R.id.frag_text_show);

String text_get = input.getText().toString();
output.setText("hello "+text_get+" how are you today?");

comm.apply(text_get);
}
}

frag_list(其他 fragment )

public class Frag_list extends Fragment{



ArrayList<String> list;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_list, container, false);

list = new ArrayList<String>();



ArrayAdapter<String> adapter =
new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, list);

ListView lv = (ListView) view.findViewById(R.id.list_frag);
lv.setAdapter(adapter);

return view;

}

public void addItem(String data){

list.add(data);
}
}

如果另一个 fragment 还没有标签,我如何访问它?

最佳答案

如果您碰巧知道要调用哪个 fragment ,那么在这种情况下 FragmentActivity 可以充当中介,因为它只是一个“主机”。您已经拥有此 Communicator 界面。让它与给定的 fragment 通信:

public interface Communicator {
public void apply(String data, String tag);
}

以及覆盖:

@Override
public void apply(String data, String tag) {
FragmentManager fm = getSupportFragmentManager();
Frag_list frag_list = (Frag_list) fm.findFragmentByTag(tag);
//Fallback plan in case the fragment has not been created.
if(frag_list == null) {
frag_list = new Frag_list();
//Include the fragment for future reference.
//This fragment has no view
fm.beginTransaction().add(frag_list, tag);
}
frag_list.addItem(data);
}

并修改 fragment 以始终使列表可用:

public class Frag_list extends Fragment{

ArrayList<String> list = new ArrayList<String>();
//...

public void addItem(String data){
//Add check to avoid problems
if(list != null) {
list.add(data);
}
}
}

关于java - 当只有一个 fragment 可见时, fragment 之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882840/

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