二克拉梦想
2016-11-07 04:30
采纳率: 50%
浏览 1.1k
已采纳

Android中Fragment和Activity间数据交换的问题

我想在Activity中读取Fragment中EditText中的字符串,找了一些资料都是使用接口回调的方法,下面程序附录中的第二种方法,我理解了一下发现第一种方法也可以实现,那么问什么非要使用接口回调的方法开实现数据共享而没有使用提供一个get方法来获取数据?是不是接口回调还有其他好处?

Fragemnt的源码:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

public class Fragment1 extends Fragment {
private EditText editText;

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater.inflate(R.layout.fragment1_layout, null);
    editText = (EditText) view.findViewById(R.id.editText1);
    return view;
}

//第一种方法
public String getData(){
return editText.getText().toString();
}
// 第二种方法接口回调
public void getEditText(CallBack callBack) {
callBack.getData(editText.getText().toString());
}

public interface CallBack {
    public void getData(String str);
}

@Override
public void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}

}

Activity代码 :
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.example.class_fragment_activity_communicating_data.Fragment1.CallBack;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    final Fragment1 fragment1 = new Fragment1();
    transaction.add(R.id.right, fragment1, "fragment1");
    transaction.commit();
    findViewById(R.id.A_button1).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            fragment1.getEditText(new CallBack() {//通过接口回调获取Fragment中的值

                @Override
                public void getData(String str) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this, str, 1).show();
                }
            });

// Toast.makeText(MainActivity.this, fragment1.getData(), 1).show();
//Fragment的实例调用Fragment的函数也能实现数据通信,为嘛要使用接口? 使用接口的好处?
}
});
}

}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 纯洁小码农_z 2016-11-07 06:13
    已采纳

    打个比方,如果你要edittextview内容改变而activity就要第一时间接收到并获取值,那你通过get方法实现不是比较麻烦么?你还要手动去通知activity说我发生了改变了,然后在获取值,但是如果是接口回调的话,那么就会第一时间获取到改变的值,即edittextview输入时监听,发生改变则接口回调到activity那边,诚然get也可以实现,但是那样要做多几层操作才可以,比较臃肿

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题