【发布时间】:2018-10-26 06:25:12
【问题描述】:
如何从自定义对话框中获取数据到 Activity 并将该数据传递给 recyclerView。
我尝试了下面的链接,但没有成功, How can I pass values between a Dialog and an Activity?
下面是Activity 类
public class MutipleResourcesActivity extends AppCompatActivity implements View.OnClickListener, AddEachResourceDialog.OnMyDialogResult{
RecyclerView list_resources;
ImageView img_addResource;
private ArrayList<AddResource> resources = new ArrayList<>();
public AddResourceAdapter resourceAdapter;
AddEachResourceDialog resourceDialog;
String result1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_multiple_resources);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setContentInsetsRelative(0, toolbar.getContentInsetEnd());
//toolbar.setContentInsetsAbsolute(0,0);
setSupportActionBar(toolbar);
toolbar.setTitle("Enter Timings");
list_resources = (RecyclerView) findViewById(R.id.recyclerview_multiResources);
img_addResource = (ImageView) findViewById(R.id.img_addResource);
img_addResource.setOnClickListener(this);
}
private void setAdapter() {
resourceAdapter = new AddResourceAdapter(resources);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
list_resources.setLayoutManager(mLayoutManager);
list_resources.setItemAnimator(new DefaultItemAnimator());
AddResource ar = new AddResource(mspinnerValue, mstartTime,mendTime);
resources.add(ar);
resourceAdapter.notifyDataSetChanged();
list_resources.setAdapter(resourceAdapter);
//resources.add(result1);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.img_addResource:
try {
AddEachResourceDialog addEachResource = new AddEachResourceDialog(this);
//addEachResource.show(getSupportFragmentManager(), "Dialog");
addEachResource.show();
addEachResource.setWindowSize();
}catch (Exception e){
e.printStackTrace();
}
break;
}
}
@Override
public void finish(String spinnerValue, String startTime, String endTime) {
System.out.println("####### spinnerValue : "+spinnerValue);
System.out.println("####### startTime : "+startTime);
System.out.println("####### endTime : "+endTime);
setAdapter();
}
}
下面是我的自定义对话框,它有接口“OnMyDialogResult”
public class AddEachResourceDialog extends BaseDialog implements View.OnClickListener{
private Context context;
private static DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
private static DateFormat tf = new SimpleDateFormat("HH:mm");
private Calendar startDateTime, finishDateTime;
private DatePickerDialog startDatePicker, finishDatePicker;
private TimePickerDialog startTimePicker, finishTimePicker;
Spinner spinner_resources;
EditText edt_startTime, edt_endTime;
Button btn_save, btn_cancel;
TextView tv_basicStartDate, tv_basicStartTime, tv_basicFinishDate, tv_basicFinishTime;
OnMyDialogResult mDialogResult;
AddResource ads = new AddResource();
public AddEachResourceDialog(Context context) {
super(context);
this.context = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
setContentView(R.layout.add_each_resource);
setTitle("Add Timings");
spinner_resources = (Spinner) findViewById(R.id.spinner_resources);
tv_basicStartDate = (TextView) findViewById(R.id.txt_basicStartDate);
tv_basicFinishDate = (TextView) findViewById(R.id.txt_basicFinishDate);
tv_basicStartTime = (TextView) findViewById(R.id.txt_basicStartTime);
tv_basicFinishTime = (TextView) findViewById(R.id.txt_basicFinishTime);
tv_basicStartDate.setOnClickListener(this);
tv_basicFinishDate.setOnClickListener(this);
tv_basicStartTime.setOnClickListener(this);
tv_basicFinishTime.setOnClickListener(this);
startDateTime = (GregorianCalendar) GregorianCalendar.getInstance();
finishDateTime = (GregorianCalendar) GregorianCalendar.getInstance();
finishDateTime.add(Calendar.DAY_OF_MONTH, 1);
tv_basicStartDate.setText(df.format(startDateTime.getTime()));
tv_basicStartTime.setText(tf.format(startDateTime.getTime()));
tv_basicFinishDate.setText(df.format(finishDateTime.getTime()));
tv_basicFinishTime.setText(tf.format(finishDateTime.getTime()));
btn_save = (Button) findViewById(R.id.saveBtn);
btn_cancel = (Button) findViewById(R.id.cancelBtn);
btn_save.setOnClickListener(this);
btn_cancel.setOnClickListener(this);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.saveBtn:
mDialogResult = new OnMyDialogResult() {
@Override
public void finish(String spinnerValue, String startTime, String endTime) {
ads.setName(String.valueOf(spinner_resources.getSelectedItem().toString()));
ads.setBasicStartDate(String.valueOf(tv_basicStartDate.getText().toString()));
ads.setBasicFinishDate(String.valueOf(tv_basicFinishDate.getText().toString()));
ads.setBasicStartTime(String.valueOf(tv_basicStartTime.getText().toString()));
ads.setBasicFinishTime(String.valueOf(tv_basicFinishTime.getText().toString()));
mDialogResult.finish(ads.getName(), ads.getBasicStartDate() +":"+ads.getBasicStartTime(), ads.getBasicFinishDate() +":"+ads.getBasicFinishTime());
mDialogResult.finish(ads.getName(), ads.getStartTime(), ads.getEndTime());
}
};
AddEachResourceDialog.this.dismiss();
break;
case R.id.cancelBtn:
//onBackPressed();
AddEachResourceDialog.this.dismiss();
break;
default:
break;
}
}
public void setDialogResult(OnMyDialogResult dialogResult){
mDialogResult = dialogResult;
}
public interface OnMyDialogResult{
//void finish(AddEachResourceDialog result);
void finish(String spinnerValue, String startTime, String endTime);
}
}
没有从 Dialog 获取数据到 Activity,我必须将该数据传递给 recyclerview。请帮我解决一下这个。提前致谢。
【问题讨论】:
-
你试过使用接口吗?
-
是的,在自定义对话框中它有接口,但是数据没有从customDialog传递到Activity。请帮助我@edwin
-
有人遇到了和你类似的问题,看看这个:stackoverflow.com/questions/4279787/…
-
我已经引用了您提到但没有成功的相同链接。
-
如果您使用界面,您应该能够从自定义对话框获取数据到您的活动。您是否尝试使用断点来检查您的代码是否触发了您正在覆盖的 finish() 方法?
标签: android android-recyclerview