亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我沒有使用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條經驗 獲得超16個贊

在類上實現接口并不意味著它會自動獲得調用。

例如,如果 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 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號