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个回答

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

q296264785
二克拉梦想 谢谢,我又发现在activity中可以通过FragmentManager类获取和activity关联的Fragment实例,获取到Fragment后通过getViewgetView() .findViewById()获取相应的组件就可以进行事件监听
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!