2015-04-27 1 views
0

У меня есть один вид активности1 со списком, и после щелчка по одному элементу списка он показывает собственный запросDialog с 2 вариантами (кнопки). Мне нужно вернуть тот, который я нажал, чтобы открыть другое действие из моей активности1 со списком. Как я могу это сделать? Мои AskDialog:Как получить данные из AskDialog вернуться к действию

public class AskDialog extends Dialog implements 
    android.view.View.OnClickListener { 

public Activity c; 

private Button edit; 
private Button delete; 
private int position; 
private boolean tariff; 

public AskDialog(Activity a,int position,boolean tariff) { 
    super(a); 
    // TODO Auto-generated constructor stub 
    this.c = a; 
    this.position = position; 
    this.tariff = tariff; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.ask_dialog); 
    edit = (Button) findViewById(R.id.editBtn); 
    if(tariff){ 
     edit.setText("Zobrazit záznam"); 
    } 
    delete = (Button) findViewById(R.id.deleteBtn); 
    edit.setOnClickListener(this); 
    delete.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.editBtn: 

      break; 
     case R.id.deleteBtn: 
dismiss(); 
      break; 
     default: 
      break; 
     } 
     dismiss(); 
    } 
} 

Здесь я называю этот диалог:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, 
             long id) { 
        positionOfTAriff = position; 
AskDialog askDialog = new AskDialog(MyCommonListActivity.this,position,false); 
askDialog.show(); 

Или есть odher диалог я должен использовать для этого?

+0

Может не начать AskDialog следующее действие? Вы можете дать его конструктору необходимые параметры. В противном случае выполните параметр обратного вызова. – greenapps

ответ

0

Вы можете использовать общие предпочтения:

SharedPreferences prefs = this.getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE); 

Для чтения предпочтения:

String dateTimeKey = "com.example.app.datetime"; 

// use a default value using new Date() 
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 

редактировать и сохранять предпочтения

Date dt = getSomeDate(); 
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply(); 

Вы можете совершить предпочтения в AsdkDialog и читать в вашем активности или фрагмента.

+0

Здравствуйте, вы попробуете это решение? –

0

Там может быть два подхода

  1. Создать интерфейс, реализовать активность/фрагмент с созданным интерфейсом, передать его ссылку на ваш диалог и инициализировать в диалоге, чем в onDestroy() вызове методы интерфейса с помощью ссылки сохраняется в вашем диалог
  2. Обновление диалога для DialogFragment, перед вызовом dialog.show(); вызова dialog.setTargetFragment(TargetFragment, RequestCode); и реализовать onActivityResult в вашем Fragment, а также в вашем Activity, и прежде чем уничтожить ваш диалог вызова getTargetFragment().onActivityResult(RequestCode, Activity.RESULT_OK, intent);
0

Добавить параметр обратного вызова в конструктор вашего диалога.

Callback myCallback; 
public AskDialog(Activity a, int position, Callback myCallback, boolean tariff) { 
super(a); 
this.c = a; 
this.position = position; 
this.tariff = tariff; 
this.myCallback = myCallback; 
} 

Изменение OnClick:

public void onClick(View v) { 
switch (v.getId()) { 
    case R.id.editBtn: 
     { 
      Bundle bundle = new Bundle(); 
      bundle.putString("choice", "edit"); 
      bundle.putInt("position", position); 

      Message msg = new Message(); 
      msg.setData(bundle); 
      myCallback.handleMessage(msg); 

      dismiss(); 
     } 
    break; 
    case R.id.deleteBtn: 
     { 
      Bundle bundle = new Bundle(); 
      bundle.putString("choice", "delete"); 
      bundle.putInt("position", position); 

      Message msg = new Message(); 
      msg.setData(bundle); 
      myCallback.handleMessage(msg); 

      dismiss(); 
     } 
     break; 
    default: 
     break; 
    } 
} 

Где вы вызовите диалог вы делаете обработчик обратного вызова:

Callback theCallback = new Callback() { 
    // @Override 
    public boolean handleMessage(Message msg) { 
     // super.handleMessage(msg); 
     Bundle bundle = msg.getData(); 
     String choice = bundle.getString("choice"); 
     int position = bundle.getInt("position"); 
     Toast.makeText(MainActivity.this, choice + "\nposition: " + position, Toast.LENGTH_SHORT) .show(); 
     return true; 
    } 
}; 

И вы вызовите диалог с:

new AskDialog(MainActivity.this, position, theCallback, false).show(); 
+0

Что нужно импортировать, чтобы иметь возможность использовать этот обратный вызов? – previ

+0

Разве ваше предложение IDE не импортирует, когда вы наводите мышь выше этого слова? 'import android.os.Handler.Callback;'. – greenapps