0

Я новичок в программировании на Android, и я столкнулся с проблемой, которую я не могу преодолеть. Я создал приложение TabHost, используя примеры Android Studio. Когда пользователь нажимает кнопку, я хотел бы вызвать другое действие, которое вызывает страницу настроек (я создал базовую активность «MySettings» из gui).Начало работы и обмен данными на Android

Проблема 1. Когда действие закрывается, MainActivity повторно запускает команду CreateCoate, а выбранная вкладка возвращается на вкладку запуска. Есть ли способ просто продолжить Tab, который был выбран последним?

Вызов код:

public void buttonPressed(View view) { 
Intent intent = new Intent(MainActivity.this,MySettings.class); 
MainActivity.this.startActivity(intent); 
} 

Задача 2: Я не могу обмениваться данными между этими двумя видами деятельности:

MainActivity:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
SharedPreferences sharedpreferences =  PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sharedpreferences.edit(); 

} 

MySettings:

public class MySettings extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings_inr); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    sharedpreferences.edit().putInt("myvar",200); 
    sharedpreferences.edit().apply(); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
}; 

Этот код запускается, но когда активность MySettings закрывается, «myvar» не обновляется в вызывающей активности MainActivity.

public void setImage(){ 
    SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    int cvt=sharedpreferences.getInt("myvar",0); 
} 

ответ

0

Решение 2 задачи

В помощи Intent вы можете передавать данные из формы одного вида деятельности на другой

как следующий

public void buttonPressed(View view) { 
Intent intent = new Intent(MainActivity.this,MySettings.class); 
intent.putExtra("key","value"); 
MainActivity.this.startActivity(intent); 
} 

На втором активность

String value=getIntent().getStrigExtras("key"); 

возвращает значение

Решения 1-й проблема

Вы должны сохранить позицию табуляции, который выбран и когда вы вернуться к этой деятельности присвоить эту позицию tabhost в перевыбранных Вкладки

1

Задача 1:

Вы должны сохранить selecte d tab в вашей деятельности, чтобы при возврате вы могли прочитать индекс и выбрать его при вызове onCreate.

Задача 2:

@Luis Miguel Sierra прямо о SharedPreference вещи.

Но вы можете захотеть 'startActivityForResult' передать данные обратно в первую активность.

Начиная с другой деятельности не обязательно быть в одну сторону. Вы также можете начать другое действие и получить результат. Чтобы получить результат, вызовите startActivityForResult() (вместо startActivity()).

Например, ваше приложение может запустить приложение для камеры и получить в результате захваченное фото. Или вы можете запустить приложение «Люди», чтобы пользователь мог выбрать контакт, и в результате вы получите данные о контакте.

Конечно, работа, которая отвечает, должна быть сконструирована так, чтобы возвращать результат. Когда это произойдет, он отправляет результат как другой объект Intent. Ваша активность получает его в обратном вызове onActivityResult().

Дополнительная информация: Getting a Result from an Activity

0

И если вы хотите установить текущую выбранную вкладку onBackPress затем просто сохранить выбранный индекс вкладки и вы можете сбросить его, используя ниже кода

viewPager.setCurrentItem(index); 

Если вы хотите все данные, которые вы получаете по первой активности для второго действия, затем вы можете использовать следующий код для отправки данных через Intent

Intent intent=new Intent(CurrentActivity.this,SecondActivity.class); 
    intent.putExtra("id", iddata); 
    intent.putExtra("title", titledata); 
    startActivity(intent); 

код для приема данных, который отправил через Intent в SecondActivity

Bundle b=getIntent().getExtras(); 
    String id=b.getString(id); 
0

Первая проблема: Если он работает OnCreate снова, это означает, что он был разрушен. Было бы неплохо, если бы вы могли опубликовать, как создается ваш tablayout.

Во-вторых: Для обмена данными между действиями вы не должны использовать SharedPreferences, вы должны передавать данные в намерении. SharedPreferences предназначен для хранения постоянных данных в вашем приложении.

Так оно и должно выглядеть следующим образом:

Intent intent = new Intent(MainActivity.this, MySettings.class); 
intent.putExtra(MySettings.PARAM, "200"); 
MainActivity.this.startActivity(intent); 

И для получения его в ваших MySettings следующим образом:

public class MySettings extends AppCompatActivity { 
    public static final String PARAM = "myvar"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings_inr); 

     String param = getIntent().getStringExtras(PARAM); 
} 

Третий один:

Ваш вар не сохраняется, потому что каждый раз, когда вы вызываете edit(), он создает новый экземпляр редактора, поэтому никакое значение не сохраняется. Так что нужно просто изменить

SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    sharedpreferences.edit().putInt("myvar",200); 
    sharedpreferences.edit().apply(); 

в

SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    sharedpreferences.edit().putInt("myvar",200).apply(); 
0

Спасибо Луис, что решить мою вторую проблему. Изнутри второй деятельности я использовал

sharedpreferences.edit().putInt("myvar",200).commit(); 

Вместо того

sharedpreferences.edit().putInt("myvar",200); 
    sharedpreferences.edit().commit(); 

Опять же ... спасибо за всякие быстрые ответы.

+0

Рад, что это помогло. Я бы использовал apply() вместо того, чтобы сделать его асинхронным. О вашем вопросе о том, если sharedpreferences - это способ, подумайте о следующем: если в следующий раз, когда вы откроете приложение, вам будут нужны эти изменения, сделанные в ваших настройках, это путь. В другом случае это что-то временное, поэтому это не лучший способ обхода.Если вы находитесь в деле sencond, вам следует снова использовать намерение. Найдите startActivityForResult, чтобы узнать, как его реализовать. Там есть множество примеров. –

Смежные вопросы