我在我的应用程序对话框中将数据发送到主机 Activity 。在 Java 中,我必须从这个对话框中实现接口(interface),并且一切正常。在 Kotlin ,我看到我的听众无论如何都没有被调用。在我的对话框中,我有两个调用 Activity 类的按钮:
okFilter.setOnClickListener(view1 -> {
dismiss();
Intent intent = new Intent(getContext(), HomeScreen.class);
intent.putExtra("filter_data",data);
intent.putExtra("id",4);
startActivity(intent);
});
我还有界面:
public interface OnButtonClick {
void onDialogClickListener(Integer job_type, HashMap<String, String> filter_data);
}
但是 onDialogClickListener
无论如何都没有使用 :( 然后我在托管 Activity 中实现了这个接口(interface):
override fun onDialogClickListener(job_type: Int?, filter_data: java.util.HashMap<String, String>?) {
bottom_navigation_t.selectedItemId = R.id.full_jobAgent
val jobList = JobList()
val bundle = Bundle()
bundle.putInt("offset", 1)
bundle.putSerializable("filter_data", data)
jobList.arguments = bundle
transaction.replace(R.id.contentContainerT, jobList).addToBackStack(null).commit()
}
而且它不起作用。这个乐趣没有被调用,我只捕获了 Intent 数据。在 Java 中它有效,我做错了什么?
最佳答案
试试这个
在您的 Activity 中实现您的界面。
class MainActivity : AppCompatActivity(), OnButtonClick {
override fun onDialogClickListener(job_type: Int,filter_data: HashMap<String, String>) {
Log.e("MainActivity ",job_type+"")
Log.e("MainActivity ",filter_data+"")
}
}
如果您使用的是对话框 fragment ,而不只是这样做,则为 onAttach
中的界面对象提供上下文。
class CustomDialog: DialogFragment() {
var listener: OnButtonClick ? = null
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as OnButtonClick
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view: View =
activity!!.layoutInflater.inflate(R.layout.your_dialog_view, container, false)
view.button!!.setOnClickListener {
listener!!.onDialogClickListener(your_job_type, your_map)
}
return view
}
}
关于android - 如何将数据从对话框发送到我的 Activity kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56106534/