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

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也可以实现,但是那样要做多几层操作才可以,比较臃肿

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能