不是通过意图或bundle而是通过 android 中的界面将数据从主活动发送到片段?



我的问题很简单,如何将数据从主活动发送到通过接口进行分段,而不是通过 android 中的意图或捆绑包。 请指导我谢谢。

这是我的代码从片段到通过接口发送的活动数据,但我想反对它的活动到片段,我不知道该怎么做。

public interface OnRestaurantSelectedListener {
public void onRestaurantSelected(String s);
}

MainActivity extends AppCompatActivity implements OnRestaurantSelectedListener{
String mPosition;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onRestaurantSelected(String s) {
mPosition =s;
}
}

在片段中:

public class ListFragment extends Fragment {
...
private OnRestaurantSelectedListener mOnRestaurantSelectedListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mOnRestaurantSelectedListener = (OnRestaurantSelectedListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString() + e.getMessage());
}
}
mOnRestaurantSelectedListener.onRestaurantSelected("AliResturant");

}

创建接口FragmentCommunicator为,

public interface FragmentCommunicator{
public void passDataToFragment(String someValue);
}

在您的主活动中,我们可以使用接口并将数据传递到片段。像下面一样,

public class MainActivity extends FragmentActivity{
//interface through which communication is made to fragment
public FragmentCommunicator fragmentCommunicator;
private Button fragmentButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.title_viewpager);
fragmentButton = (Button)findViewById(R.id.fragmentButton);
setUIListeners();
}
private void setUIListeners(){
fragmentButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(fragmentCommunicator != null)
fragmentCommunicator.passDataToFragment("Hi from FragmentActivity");
}
});
}
}

以片段形式访问传递的数据,如下所示,

public class CustomFragment extends Fragments implements FragmentCommunicator{
public Context context;
private Button activityButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.activity_frag, container, false);
activityButton =(Button)fragmentView.findViewById(R.id.activityButton);
textView =(TextView)fragmentView.findViewById(R.id.textView);
setRetainInstance(true);
return fragmentView;
}
//FragmentCommunicator interface implementation
@Override
public void passDataToFragment(String someValue){
String activityAssignedValue = someValue;
textView.setText(activityAssignedValue); 
}
}

最新更新