看实例:activity A 下面有两个fragment a 和fragment b,通过GroupButton来切换,从fragment b又跳入了fragment c,并且从fragment c 中得到数据,再从c跳转并传递数据到b。
需要注意的问题有以下几点:
1,在b中跳入c时,是要引用activity中的fragmentManager,还是直接通过getActivity()来获得一个fragmentManager呢。
2,c中的数据如何传递到b中,并显示在控件上。
3,如果处理不当,获取数据后的b会在和a互相切换时出现页面重叠现象。体验很差。
先看一下我搞出来完工后的代码:
注:主activity中的代码。
public class SetCardActivity extends Activity
{
private ImageButton set_card_back;
private RadioButton set_card_rb1,set_card_rb2;
private BoundFragment boundFragment;
private UnBoundFragment unBoundFragment;
public FragmentManager fm;
public FragmentTransaction ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.act_set_card);
initView();
select(1);
set_card_back = (ImageButton) findViewById(R.id.set_card_back);
set_card_back.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
startActivity(new Intent(SetCardActivity.this,SetActivity.class));
SetCardActivity.this.finish();
}
});
}
private void initView() {
set_card_rb1 = (RadioButton) findViewById(R.id.set_card_rb1);
set_card_rb2 = (RadioButton) findViewById(R.id.set_card_rb2);
}
private void initButtonBackground1(){
set_card_rb1.setBackgroundColor(getResources().getColor(R.color.white));
set_card_rb1.setTextColor(getResources().getColor(R.color.red));
}
private void initButtonBackground2(){
set_card_rb2.setBackgroundColor(getResources().getColor(R.color.white));
set_card_rb2.setTextColor(getResources().getColor(R.color.red));
}
public void select(int i){
fm = getFragmentManager();
ft = fm.beginTransaction();
hideFragment(ft);
switch(i)
{
case 1 :
set_card_rb1.setBackgroundColor(getResources().getColor(R.color.red));
set_card_rb1.setTextColor(getResources().getColor(R.color.white));
ft.replace(R.id.set_card_RL2, new BoundFragment());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
break;
case 2 :
set_card_rb2.setBackgroundColor(getResources().getColor(R.color.red));
set_card_rb2.setTextColor(getResources().getColor(R.color.white));
unBoundFragment = new UnBoundFragment();
ft.replace(R.id.set_card_RL2, unBoundFragment);
break;
default :
break;
}
ft.commit();
}
public void hideFragment(FragmentTransaction ft){
if(boundFragment != null){
ft.hide(boundFragment);
}
if(unBoundFragment != null){
ft.hide(unBoundFragment);
}
}
public void doClick(View v) {
switch(v.getId())
{
case R.id.set_card_rb1 :
select(1);
initButtonBackground2();
break;
case R.id.set_card_rb2 :
select(2);
initButtonBackground1();
break;
}
}
}
主activity下的两个fragment代码片段
1,
public class UnBoundFragment extends Fragment {
EditText set_unbound_fragment_ET2;
TextView set_unbound_fragment_ET1;
Button set_unbound_fragment_bt;
RelativeLayout set_unbound_fragment_RL1;
SetCardActivity setCardActivity;
FragmentTransaction ft;
public static UnBoundFragment getInstance(Bundle bundle) {
UnBoundFragment unBoundFragment = new UnBoundFragment();
unBoundFragment.setArguments(bundle);
return unBoundFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.set_card_unbound_fragment, null);
set_unbound_fragment_ET2 = (EditText) view.findViewById(R.id.set_unbound_fragment_ET2);
set_unbound_fragment_ET1 = (TextView) view.findViewById(R.id.set_unbound_fragment_ET1);
if(getArguments() != null)
{
set_unbound_fragment_ET1.setText(getArguments().getString("cardno"));
}
set_unbound_fragment_RL1 = (RelativeLayout) view.findViewById(R.id.set_unbound_fragment_RL1);
set_unbound_fragment_RL1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setCardActivity = (SetCardActivity)getActivity();
ft = setCardActivity.fm.beginTransaction();
ft.replace(R.id.set_card_RL2, new ChoiceCardFragment());
ft.commit();
}
});
set_unbound_fragment_bt = (Button) view.findViewById(R.id.set_unbound_fragment_bt);
set_unbound_fragment_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Map<String, String> map = new HashMap<String,String>();
if(getArguments()!=null){
map.put("mercId", Shared.mercid);
map.put("loginName", Shared.getInstence(getActivity()).getPhone());
map.put("bankId", getArguments().getString("bankId"));
map.put("cardno", getArguments().getString("cardno"));
map.put("cardType", getArguments().getString("cardType"));
map.put("payPwd", set_unbound_fragment_ET2.getText().toString());
map = HttpPostTool.encryptionMap(map);
map.put("md5key", Shared.getInstence(getActivity()).getRadom());
Log.i("MAP", "MM"+map);
AsyncHttp async = new AsyncHttp(SUri.CARD_UNBUNDLE, new HttpRequestListener() {
@Override
public void success(JSONObject jObject) {
if(jObject.optString("rspCod").equals(Code.RIGHT_RSPCOD)){
Toast.makeText(getActivity(), "解绑成功", 0).show();
}else{
Toast.makeText(getActivity(), jObject.optString("rspMsg"), 0).show();
}
}
@Override
public void error() {
}
});
async.execute(map);
}
}
});
return view;
}
}
2,
public class BoundFragment extends Fragment
{
EditText set_bound_fragment_ET1,set_bound_fragment_ET2,set_bound_fragment_ET3,set_bound_fragment_ET4,
set_bound_fragment_ET5,set_bound_fragment_ET6;
Button set_card_bt1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.set_card_bound_fragment, container, false);
set_bound_fragment_ET1 = (EditText)view.findViewById(R.id.set_bound_fragment_ET1);
set_bound_fragment_ET2 = (EditText)view.findViewById(R.id.set_bound_fragment_ET2);
set_bound_fragment_ET3 = (EditText)view.findViewById(R.id.set_bound_fragment_ET3);
set_bound_fragment_ET4 = (EditText)view.findViewById(R.id.set_bound_fragment_ET4);
set_bound_fragment_ET5 = (EditText)view.findViewById(R.id.set_bound_fragment_ET5);
set_bound_fragment_ET6 = (EditText)view.findViewById(R.id.set_bound_fragment_ET6);
set_bound_fragment_ET1.setFocusable(false);
set_bound_fragment_ET2.setFocusable(false);
set_card_bt1 = (Button)view.findViewById(R.id.set_card_bt1);
set_card_bt1.setOnClickListener(new OnClickListener() {
@SuppressWarnings("unchecked")
@Override
public void onClick(View view) {
Map<String, String> map2 = new HashMap<String, String>();
map2.put("mercId", Shared.mercid);
map2.put("loginName", Shared.getInstence(getActivity()).getPhone());
map2.put("bankId", "中国农业银行");
map2.put("cardno", set_bound_fragment_ET3.getText().toString());
map2.put("cardType", "1");
map2.put("phone", set_bound_fragment_ET5.getText().toString());
map2.put("payPwd", set_bound_fragment_ET6.getText().toString());
map2 = HttpPostTool.encryptionMap(map2);
map2.put("md5key", Shared.getInstence(getActivity()).getRadom());
Log.i("MAP", "MM"+map2);
AsyncHttp async = new AsyncHttp(SUri.CARD_BOUND, new HttpRequestListener() {
@Override
public void success(JSONObject jObject) {
if(jObject.optString("rspCod").equals(Code.RIGHT_RSPCOD))
{
Log.i("JSON1", jObject.toString());
Toast.makeText(getActivity(), jObject.optString("rspMsg"), 0).show();
}else{
Log.i("JSON2", jObject.toString());
Toast.makeText(getActivity(), jObject.optString("rspMsg"), 0).show();
}
}
@Override
public void error() {
Toast.makeText(getActivity(), "网络出错", 0).show();
}
});
async.execute(map2);
}
});
getName();
return view;
}
private void getName()
{
final Map<String, String> map = new HashMap<String, String>();
map.clear();
map.put("mercId",Shared.mercid);
map.put("loginName",Shared.getInstence(getActivity()).getPhone());
map.put("md5key",Shared.getInstence(getActivity()).getRadom());
AsyncHttp async = new AsyncHttp(SUri.CARD_NAME, new HttpRequestListener() {
@Override
public void success(JSONObject jObject)
{
if(jObject.optString("rspCod").equals(Code.RIGHT_RSPCOD))
{
Log.i("TAG", jObject.toString());
String name = jObject.optString("name");
int startPosition1 = set_bound_fragment_ET1.getSelectionStart();
int startPosition2 = set_bound_fragment_ET2.getSelectionStart();
Editable eb1 = set_bound_fragment_ET1.getEditableText();
Editable eb2 = set_bound_fragment_ET2.getEditableText();
switch(Integer.parseInt(jObject.optString("mercType")))
{
case 1:
eb1.insert(startPosition1, "个人");
break;
case 2:
eb1.insert(startPosition1, "企业");
break;
}
eb2.insert(startPosition2, name);
}else{
Toast.makeText(getActivity(), jObject.optString("rspMsg"), 0).show();
}
}
@Override
public void error()
{
Toast.makeText(getActivity(), "网络错误", 0).show();
}
});
async.execute(map);
}
}
3,fragment c中的代码
public class ChoiceCardFragment extends Fragment implements OnItemClickListener{
ListView choice_card_LV;
CardAdapter myAdapter;
List<Item> item;
SetCardActivity setCardActivity;
FragmentTransaction ft;
String cardno,bankId,cardType;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.choice_card_fragment, null);
choice_card_LV = (ListView) view.findViewById(R.id.choice_card_LV);
choice_card_LV.setOnItemClickListener(this);
item = new ArrayList<Item>();
myAdapter = new CardAdapter(getActivity(), item);
choice_card_LV.setAdapter(myAdapter);
getCardNum();
return view;
}
private void getCardNum() {
Map<String, String> map = new HashMap<String, String>();
map.put("mercId", Shared.mercid);
map.put("loginName", Shared.getInstence(getActivity()).getPhone());
map.put("md5key", Shared.getInstence(getActivity()).getRadom());
AsyncHttp async = new AsyncHttp(SUri.FIND_CARDNUM, new HttpRequestListener() {
@Override
public void success(JSONObject jObject) {
if(jObject.optString("rspCod").equals(Code.RIGHT_RSPCOD)){
Log.i("findcard", jObject.toString());
List<Map<String, String>> listResult = ResponseDeal.strToList(jObject.optString("rspStr"));
Log.i("findcard2", listResult.toString());
for(Map<String, String> map : listResult){
bankId = map.get("BANKID");
cardno = map.get("CARDNO");
cardType = map.get("CARDTYPE");
Log.i("cardType", "ff"+cardType);
item.add(new Item(cardno,bankId,cardType));
}
myAdapter.notifyDataSetChanged();
}
}
@Override
public void error() {
Toast.makeText(getActivity(),"网络出错", 0).show();
}
});
async.execute(map);
}
class CardAdapter extends BaseAdapter{
List<Item> item;
LayoutInflater integer;
public CardAdapter(Context context , List<Item> item) {
super();
this.integer = LayoutInflater.from(context);
this.item = item;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return item.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return item.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View view, ViewGroup arg2) {
// TODO Auto-generated method stub
if(view == null)
{
view = integer.inflate(R.layout.choice_card_item, null);
}
TextView card_item_tv = (TextView) view.findViewById(R.id.card_item_tv);
ImageView card_item_iv = (ImageView) view.findViewById(R.id.card_item_iv);
EditText card_item_ET = (EditText) view.findViewById(R.id.card_item_ET);
card_item_ET.setText(item.get(position).getCardno());
card_item_ET.setFocusable(false);
return view;
}
}
class Item{
private String cardno,bankId,cardType;
public Item(String cardno, String bankId, String cardType) {
super();
this.cardno = cardno;
this.bankId = bankId;
this.cardType = cardType;
}
public String getBankId() {
return bankId;
}
public void setBankId(String bankId) {
this.bankId = bankId;
}
public String getCardType() {
return cardType;
}
public void setCardType(String cardType) {
this.cardType = cardType;
}
public String getCardno() {
return cardno;
}
public void setCardno(String cardno) {
this.cardno = cardno;
}
}
public static UnBoundFragment getInstance(Bundle bundle) {
UnBoundFragment secondFragment = new UnBoundFragment();
secondFragment.setArguments(bundle);
return secondFragment;
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
cardno = item.get(position).getCardno();
bankId = item.get(position).getBankId();
cardType = item.get(position).getCardType();
Bundle nBundle = new Bundle();
nBundle.putString("cardno", cardno);
nBundle.putString("bankId", bankId);
nBundle.putString("cardType", cardType);
UnBoundFragment unBoundFragment = UnBoundFragment.getInstance(nBundle);
setCardActivity = (SetCardActivity)getActivity();
ft = setCardActivity.fm.beginTransaction();
ft.replace(R.id.set_card_RL2, unBoundFragment);
ft.commit();
}
}