如何在活动

时间:2015-10-29 14:52:00

标签: java android android-intent broadcast

所以我有两个活动,当我从第二个活动中选择一个项目到第一个活动时,我想传递一个从微调器获得的字符串。

第二项活动:



filetypeselected = parent.getItemAtPosition(position).toString();
                                                                   Intent filetypeselectedintent = new Intent(advancedoptionsactivity.this,First.class);
                                                                    filetypeselectedintent.putExtra("filetypeselected", filetypeselected);
                                                                    startActivity(filetypeselectedintent);




第一项活动:

在onResume下:



        String filetypeselected =null;
        Intent filetypeselectedintent = this.getIntent();

        if(filetypeselectedintent != null)
        {
            filetypeselected = filetypeselectedintent.getStringExtra("filetypeselected");
        }

        TextView test = (TextView) findViewById(R.id.test);
        test.setText(filetypeselected);




但是当在第二个活动中从微调器中选择一个项目时,第一个活动会出现......我想要的是在第二个活动的微调器中选择项目后,意图被发送到活动1活动2仍留在我的屏幕上......

我正在考虑使用广播公司,如果我;我应该使用一个广播公司,有人可以告诉我如何在活动1中注册接收器吗?

谢谢!

更新:

以下是共享首选项的代码: 第一项活动:  在onResume()下



            SharedPreferences AdvancedOptions = getSharedPreferences("AdvancedOptions",MODE_WORLD_READABLE);
            filetypeselected = AdvancedOptions.getString(filetypeselected, null);

            TextView test = (TextView) findViewById(R.id.test);
            test.setText(String.valueOf(filetypeselected));




第二项活动:

在onchecklistener下



                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id)

                    {
                    if (position != 0)
                        {
                        Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " has been selected.", Toast.LENGTH_LONG).show();
                        filetypeselected = parent.getItemIdAtPosition(position);

                            SharedPreferences AdvancedOptions = getSharedPreferences("AdvancedOptions",MODE_WORLD_READABLE);
                            SharedPreferences.Editor AdvancedOptionsEditor = AdvancedOptions.edit();
                            AdvancedOptionsEditor.putLong("filetypeselected",filetypeselected);
                            AdvancedOptionsEditor.commit();


                        }
                    }
&#13;
&#13;
&#13;

可能它与filetypeselected的变量实例化有关吗?

下的第一个活动中的

&#13;
&#13;
public class First extends Activity {

    String filetypeselected =null;

[...]
&#13;
&#13;
&#13;

和第二项活动

&#13;
&#13;
public class advancedoptionsactivity extends AppCompatActivity {

    Long filetypeselected;
  [...]
&#13;
&#13;
&#13;

问题是TextView测试(在第一个活动中)总是卡在文本上:&#34; null&#34;当它应该显示在微调器中选择的项目的id时(第二个活动)。

1 个答案:

答案 0 :(得分:0)

我认为你可以通过一个简单的回调接口来做到这一点。让第一个活动实现:

public class FirstActivity extends Activity implements SecondActivity.Callback{
    private String fileTypeSelected;
    ...
    @Override 
    public void doStuff(String stuff){
        if(stuff!= null)
        {
            this.fileTypeSelected= stuff;
        }
    }
    @Override 
    public void onResume(){
        TextView test = (TextView) findViewById(R.id.test);
        test.setText(filetypeselected);
    }

}

然后在第二个活动中:

public class SecondActivity extends Activity{
    public interface Callback{
        void doStuff(String stuff);
    }
    private Callback callback; //get reference to FirstActivity somehow
    ...
}

然后在第二个活动中,您只需致电:

callback.doStuff(parent.getItemAtPosition(position).toString());

第一个活动将获得它需要的东西,当你回到它时,它会更新它的视图。

编辑:或者,如果您知道两个活动未同时实例化,则可以将信息保存在Shared Preferences的{​​{1}}中,然后检索SecondActivity中的信息s FirstActivity