猿问

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

虽然我知道我们可以使用 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);


    }

}


MMTTMM
浏览 161回答 4
4回答

侃侃尔雅

在类上实现接口并不意味着它会自动获得调用。例如,如果 B 类,A 类只能将数据传递给 B 类:实现接口。A 类持有指向 B 类对象的接口实例在你的例子中。SecondActivity 的实例不是由您创建的,因此这是不可能的。

蓝山帝景

不使用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());    }}

芜湖不芜

不,不可能通过接口在活动之间传递数据。这样做的原因是,要使用接口,接口对象必须像我们在 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();  }

潇湘沐

你应该在意图上使用额外的东西,它会更有效率。从 MainActivity 传递数据:Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("TEXT_TO_PASS", "Hello Test");startActivity(intent);然后从 SecondActivity 检索它:@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    String dataPassed = getIntent().getStringExtra("TEXT_TO_PASS");}
随时随地看视频慕课网APP

相关分类

Java
我要回答