我的 activity 中的菜单项如何从选项卡中获取数据(查看寻呼机片段)?
How can a menu item in my activity get data from the tabs(view pager fragments)?
我有一个 activity,它有 4 个选项卡(查看寻呼机片段)。片段中有形式,编辑文本以记录信息。我想在我的 activity 中使用一个菜单项将信息保存到数据库并创建一个 pdf 文件。该文件创建正常,但未向其中传递任何信息,并且 returns 出现 I/O 错误。我相信数据库也已经创建,但没有信息存储在其中。我得到一个空值。
public void save_final(){
Serv_BaseDataFragment baseFragment = (Serv_BaseDataFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
baseFragment.serv_insertToBaseData_db();
ServicingFragment serviceFragment = (ServicingFragment)getSupportFragmentManager().findFragmentById(R.id.servicingTab);
serviceFragment.insertToServicing_db();
ReplacementFragment replaceFragment = (ReplacementFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
replaceFragment.insertToReplacement_db();
Toast.makeText(this, "ALL DATA STORED SUCCESSFULLY", Toast.LENGTH_LONG).show();
Intent intent = getIntent();
finish();
startActivity(intent);
}
public void writePdf(){
String filename = Serv_BaseDataFragment.sysaid.getText().toString();
Serv_CreatePDF fop = new Serv_CreatePDF();
if (fop.writepdf(filename)) {
Toast.makeText(getApplicationContext(), filename + ".pdf created", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "I/O error", Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_maintenance, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intent = new Intent(this, Serv_SettingsActivity.class);
startActivity(intent);
return true;
}
if (id == R.id.save_tickets) {
save_final();
writePdf();
return true;
}
return super.onOptionsItemSelected(item);
}
如果它们在同一个 activity 中并且在您获取数据时在同一个片段中,例如,如果我们假设我们有一个 ID 为 chrome 的菜单项,一个字符串名称 = "john" 和一个 TextView mName 就像:
switch (item.getItemId()) {
// case R.id.chrome:
mName.setText(name);
}
但是您必须知道的一件事是,片段从来没有上下文,片段也没有什么特别之处,只需确保在获取数据时您位于应该从中获取数据的同一个片段中。
为了解决我的小问题,我将向数据库中插入数据的方法从片段移到了 Activity。我在 activity 中创建了变量来引用片段中的对象。
我有一个 activity,它有 4 个选项卡(查看寻呼机片段)。片段中有形式,编辑文本以记录信息。我想在我的 activity 中使用一个菜单项将信息保存到数据库并创建一个 pdf 文件。该文件创建正常,但未向其中传递任何信息,并且 returns 出现 I/O 错误。我相信数据库也已经创建,但没有信息存储在其中。我得到一个空值。
public void save_final(){
Serv_BaseDataFragment baseFragment = (Serv_BaseDataFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
baseFragment.serv_insertToBaseData_db();
ServicingFragment serviceFragment = (ServicingFragment)getSupportFragmentManager().findFragmentById(R.id.servicingTab);
serviceFragment.insertToServicing_db();
ReplacementFragment replaceFragment = (ReplacementFragment)getSupportFragmentManager().findFragmentById(R.id.baseDataTab);
replaceFragment.insertToReplacement_db();
Toast.makeText(this, "ALL DATA STORED SUCCESSFULLY", Toast.LENGTH_LONG).show();
Intent intent = getIntent();
finish();
startActivity(intent);
}
public void writePdf(){
String filename = Serv_BaseDataFragment.sysaid.getText().toString();
Serv_CreatePDF fop = new Serv_CreatePDF();
if (fop.writepdf(filename)) {
Toast.makeText(getApplicationContext(), filename + ".pdf created", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "I/O error", Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_maintenance, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intent = new Intent(this, Serv_SettingsActivity.class);
startActivity(intent);
return true;
}
if (id == R.id.save_tickets) {
save_final();
writePdf();
return true;
}
return super.onOptionsItemSelected(item);
}
如果它们在同一个 activity 中并且在您获取数据时在同一个片段中,例如,如果我们假设我们有一个 ID 为 chrome 的菜单项,一个字符串名称 = "john" 和一个 TextView mName 就像:
switch (item.getItemId()) {
// case R.id.chrome:
mName.setText(name);
}
但是您必须知道的一件事是,片段从来没有上下文,片段也没有什么特别之处,只需确保在获取数据时您位于应该从中获取数据的同一个片段中。
为了解决我的小问题,我将向数据库中插入数据的方法从片段移到了 Activity。我在 activity 中创建了变量来引用片段中的对象。