我是Android的新手,我试图在点击后使用意图调用我的MapFragment
以下是我的代码
以下是适配器代码:
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final BusInfo info = getItem(position);
View view = LayoutInflater.from(context).inflate(R.layout.bus_only_list,null);
TextView busname;
busname = (TextView) view.findViewById(R.id.busname);
busname.setText(info.name);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pref = context.getSharedPreferences("busInfo",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("bus_name",info.name);
editor.commit();
Intent intent = new Intent(context, MapsFragment.class);
intent.putExtra("name",info.name);
context.startActivity(intent);>
}
});
return view;
}
我想使用intent传递给mapfragment,但它会重定向到MainActivity
而不是MapFragment
。如何停止转移到MainActivity?
谢谢。
答案 0 :(得分:2)
将值传递给Fragment的常见模式是使用newInstance
方法。在此方法中,您可以将Argument设置为fragment作为发送值的方法。
首先,创建newInstance
方法:
public class YourFragment extends Fragment {
...
// Creates a new fragment with bus_name
public static YourFragment newInstance(String busName) {
YourFragment yourFragment = new YourFragment();
Bundle args = new Bundle();
args.putString("bus_name", busName);
yourFragment.setArguments(args);
return yourFragment;
}
...
}
然后您可以在onCreate
中获取值:
public class YourFragment extends Fragment {
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the value from arguments
String busName = getArguments().getString("bus_name", "");
}
...
}
您可以使用以下命令将活动的值设置为片段:
FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
YourFragment yourFragment = YourFragment.newInstance("bus_name_value");
fragTransaction.replace(R.id.fragment_place_holder, yourFragment);
fragTransaction.commit();
您可以使用上述代码在片段初始化中发送值。
如果要将值设置为已实例化的片段,可以创建一个方法,然后调用该方法来设置值:
public class YourFragment extends Fragment {
...
public setBusName(String busName) {
// set the bus name to your fragment.
}
...
}
现在,在活动中,您可以使用以下命令调用它:
// R.id.yourFragment is the id of fragment in xml
YourFragment yourFragment = (YourFragment) getSupportFragmentManager()
.findFragmentById(R.id.yourFragment);
yourFragment.setBusName("bus_name_value");
答案 1 :(得分:1)
您无法将意图传递给片段。请尝试使用Bundle。
Bundle bundle = new Bundle();
bundle.putString("name", info.name);
mapFragment.setArguments(bundle)
在你的片段(MapsFragment)中,像这样获取Bundle:
Bundle bundle = this.getArguments();
if(bundle != null){
String infoName = bundle.getString("name");
}
答案 2 :(得分:0)
正如之前提到的那样: 1.使用回调或仅对您的上下文进行强制转换(您的活动必须自己处理更改的碎片)。 2.要更改片段,请使用活动的FragmentManager - intent用于启动另一个活动。