为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我没有使用android中的界面从以前的活动中获取其他活动中的数据

为什么我没有使用android中的界面从以前的活动中获取其他活动中的数据

MMTTMM 2023-06-04 19:43:36
虽然我知道我们可以使用 get 和 put extras 来传递给其他活动,但我只是在尝试是否可以通过接口存储和获取数据。我存储了数据,但在其他活动中,我无法获取数据。下面是我累了。interface PassDataToOtherActivity {    public void passData(String data);    @SuppressLint("NewApi")    default void setData(String s) {    }public class MainActivity extends AppCompatActivity implements PassDataToOtherActivity {    private TextView textView;    private Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = findViewById(R.id.first_text);        button = findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this, SecondActivity.class);                startActivity(intent);            }        });        textView.setText("Hello Test");        setData(textView.getText().toString());        passData(textView.getText().toString());    }    @Override    public void passData(String data) {//override methods    }}public class SecondActivity extends AppCompatActivity implements PassDataToOtherActivity {    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        textView = findViewById(R.id.textView_2);    }    @Override    public void passData(String data) { //why i am not getting the datas from previous activity?        textView.setText(data);    }    @Override    public void setData(String data) { //why I am not able to get the datas from previous activity?        textView.setText(data);    }}
查看完整描述

4 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

在类上实现接口并不意味着它会自动获得调用。

例如,如果 B 类,A 类只能将数据传递给 B 类:

  • 实现接口。

  • A 类持有指向 B 类对象的接口实例

在你的例子中。SecondActivity 的实例不是由您创建的,因此这是不可能的。


查看完整回答
反对 回复 2023-06-04
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

不使用put extra和getExtra,可以通过Singleton类实现。


public class DataHolder {


    private static final DataHolder instance = new DataHolder();


    public static DataHolder getInstance() {

        return instance;

    }


    private String data;

    public String getData() {

        return data;

    }


    public void setData(String data) {

        this.data = data;

    }

}

现在您可以设置数据并获取其他类中的数据。这里我没有使用任何其他 android 提供的 api,例如 Preference 或 intent 组件来传递和获取数据。


 public class MainActivity extends AppCompatActivity {

    private TextView textView;

    private Button button;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.first_text);

        button = findViewById(R.id.button);

        textView.setText("Hello Test");

        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                DataHolder.getInstance().setData(textView.getText().toString());

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

                startActivity(intent);

            }

        });




    }

}




public class SecondActivity extends AppCompatActivity {

    private TextView textView;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        textView = findViewById(R.id.textView_2);

        textView.setText(DataHolder.getInstance().getData());

    }


}


查看完整回答
反对 回复 2023-06-04
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

不,不可能通过接口在活动之间传递数据。


这样做的原因是,要使用接口,接口对象必须像我们在 onAttach() 方法中在两个片段之间传递数据时所做的那样被初始化。


但是在 Activity 的情况下,不能传递上下文来初始化。


    class MainActivity extends AppCompatActivity implements myInterface {

          onCreate(){

            android.support.v4.app.FragmentTransaction fragmentTransaction = 

            fragmentManager.beginTransaction();

              if (fragment != null) {

                fragmentTransaction.replace(R.id.content_frame, fragment);

                fragmentTransaction.addToBackStack(fragmentTag);

                fragmentTransaction.commit();

            }

      }


      @Override

      public void onChange(String s) {

      // your retrieved code

      }

    }



    class MyFragment extends Fragment {


     private MyInterface interf ;

     @Override

        public void onAttach(Context context) {

            super.onAttach(context);

            interf = (myInterface) context;

        }

        onActivityCreated(){

         interf.onChange("Hello");

        }


    }


  public interface myInterface {

    void onChange();

  }


查看完整回答
反对 回复 2023-06-04
?
潇湘沐

TA贡献1816条经验 获得超6个赞

你应该在意图上使用额外的东西,它会更有效率。从 MainActivity 传递数据:


Intent intent = new Intent(MainActivity.this, SecondActivity.class);

intent.putExtra("TEXT_TO_PASS", "Hello Test");

startActivity(intent);

然后从 SecondActivity 检索它:


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);

    String dataPassed = getIntent().getStringExtra("TEXT_TO_PASS");

}

查看完整回答
反对 回复 2023-06-04
  • 4 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信