- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法将数据(用户从日期小部件中选择的日期)从小部件传递回调用 fragment 并将其设置在按钮上。起始 fragment 成功地将当前日期传递给小部件,但在将用户选择的日期传递回调用 fragment 时遇到问题。
这是起始 fragment 的代码,即 CrimeFragment
package com.khalsa.gurankassingh.criminalintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import java.util.Date;
import java.util.UUID;
/**
* Created by Gurankas Singh on 3/12/2017.
*/
public class CrimeFragment extends Fragment
{
public static final String ARG_CRIME_ID = "crime_id";
public static final String DIALOG_DATE = "DialogDate";
private static final int REQUEST_DATE = 0;
private Crime mCrime; //instance of the Crime class
private EditText mTitleField; // The editable text field in the fragment
private Button mDateButton; //Displays the date of the crime on the button
private CheckBox mSolvedCheckBox; //Displays the current status of the crime; solved or unsolved
public static CrimeFragment newInstance(UUID crimeID) //to pass value to the fragment via an argument to another fragment
{
Bundle args = new Bundle();
args.putSerializable(ARG_CRIME_ID,crimeID);
CrimeFragment fragment = new CrimeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
UUID crimeId = (UUID)getArguments().getSerializable(ARG_CRIME_ID);
mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.fragment_crime,container,false);
mTitleField = (EditText) v.findViewById(R.id.crime_title);
mTitleField.setText(mCrime.getTitle());
mTitleField.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
mCrime.setTitle(s.toString());
}
@Override
public void afterTextChanged(Editable s)
{
}
});
mDateButton = (Button) v.findViewById(R.id.crime_date);
updateDate();
mDateButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
FragmentManager fragmentManager = getFragmentManager();
DatePickerFragment dialog = DatePickerFragment.newInstance(mCrime.getDate());
setTargetFragment(CrimeFragment.this,REQUEST_DATE);
dialog.show(fragmentManager, DIALOG_DATE);
}
});
mSolvedCheckBox = (CheckBox) v.findViewById(R.id.crime_solved);
mSolvedCheckBox.setChecked(mCrime.isSolved());
mSolvedCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
//set the crime's solved property
mCrime.setSolved(isChecked);
}
});
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != Activity.RESULT_OK)
{
return;
}
if (requestCode == REQUEST_DATE)
{
Date date = (Date)data.getSerializableExtra(DatePickerFragment.EXTRA_DATE);
mCrime.setDate(date);
updateDate();
}
}
private void updateDate()
{
mDateButton.setText(DateFormat.format("EEEE, d MMMM, yyy", mCrime.getDate()));
}
}
这是由 DatePickerFragment 托管的 datePicker 小部件的代码
package com.khalsa.gurankassingh.criminalintent;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* Created by Gurankas Singh on 4/9/2017.
*/
public class DatePickerFragment extends DialogFragment
{
private static final String DATE_ARG = "date";
public static final String EXTRA_DATE = "com.khalsa.gurankassingh.criminalintent.date";
private DatePicker mDatePicker;
public static DatePickerFragment newInstance(Date date)
{
Bundle args = new Bundle();
args.putSerializable(DATE_ARG,date);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
Date date = (Date)getArguments().getSerializable(DATE_ARG);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
View v = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_date,null);
mDatePicker = (DatePicker)v.findViewById(R.id.dialog_date_date_picker);
mDatePicker.init(year,month,day,null);
return new AlertDialog.Builder(getActivity()).setView(v).setTitle(R.string.date_picker_title).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
int year = mDatePicker.getYear();
int month = mDatePicker.getMonth();
int day = mDatePicker.getDayOfMonth();
Date date = new GregorianCalendar(year, month, day).getTime();
sendResult(Activity.RESULT_OK, date);
}
}).create();
}
private void sendResult(int resultCode, Date date)
{
if (getTargetFragment() == null)
{
return;
}
Intent intent = new Intent();
intent.putExtra(EXTRA_DATE,date);
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent);
}
}
最佳答案
要在Fragments
之间传递数据,您需要知道的是:
1- 当您在 Activity
中创建 Fragment
时,要将数据从 Activity
传递到 Fragment
使用对象实例> 您有一个实例,因此可以使用它来传递数据,如下所示:
class Activity1 extend AppCompatActivity {
Fragment1 fragment;
void doSomethingInFramgent() {
fragment.doSomething();
}
}
2-要将数据从 Fragment
传递到 Activity
,请使用 Interface
,创建一个 Interface
并使用以下内容步骤:
2-1- 创建一个Interface
文件:
public interface FragmentInteraction {
void doSomethingInActivity();
}
2-2- 在Activity
中实现Interface
:
class Activity1 extend AppCompatActivity implement FragmentInteraction {
void doSomethingInActivity() {
// do whatever you need
}
}
2-3-从Interface
创建一个对象并在onAttach
中初始化它,如下所示:
class Fragment1 extend Fragment {
FragmentInteraction fragmentInteraction;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof FragmentInteraction) {
fragmentInteraction = (FragmentInteraction) context;
}
}
}
2-4- 使用Interface
实例调用Activity
中的方法,如下所示:
fragmentInteraction.doSomethinInActivity();
利用这一概念,您可以在 Fragments
和 Activity
之间传递数据,例如,如果您希望将数据从一个 fragment 传递到不同 Activity 中的另一个 fragment ,您可以:
Activity 1, fragment 1。 Activity 2, fragment 2
使用Interface
将数据从Fragment1
传递到Activity1
,使用startActivityForResult
启动Activity2
>,用fragment2
对象传递数据,用Interface
返回数据到Activity2
然后使用setResult
返回到 Activity 1
PS:如果你想在创建Fragment
对象时传递数据,可以使用Argument
来传递数据。
为此目的,您可以使用以下方法:
1-为获取 fragment 实例创建静态方法:
public static Fragment1 getInstance(String data1) {
Fragment1 fragment = new Fragment1();
Bundle bundle = new Bundle();
bundle.putString(KEY, data1);
fragment.setArguments(bundle);
return fragment;
}
然后在 onViewCreate
上的 onCreateView
中获取数据,如下所示:
if (getArguments() != null) {
data = getArguments().getString(KEY);
}
关于java - 如何在 Android 的同一 Activity 中将日期从一个 fragment 传递到另一个 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625784/
我对 Android 很陌生,如果问题重复,请避免并发送链接。有三个 Activity A、B 和 C。 Activity A 获取一个用户名,我想在 Activity C 中显示该用户名,但我想先运
我正在尝试制作记事本应用程序,因此每次打开新笔记时,布局都会相同。另外, Activity 的数量(新注释)不应定义得尽可能多 最佳答案 如果 Activity 始终相同,您可能应该创建一个适配器,允
我有 3 个 Activity 。 主窗口 5 个按钮 在按钮的主窗口中按下此窗口打开(将其称为父窗口) 在父窗口按钮上按下此窗口打开调用它作为结束子窗口。 现在从子窗口我从父窗口获取值如下:
我遇到了一个 Activity backstack 问题。假设我的后台有 5 个 Activity :比如 Activity A、 Activity B、 Activity C、 Activity D
我正在寻找必须具有以下附加特征的 JMS 提供程序: 采用多代理,所有代理都必须处于事件状态(无单点故障) 仅在两台机器上进行扩展就足以满足我们的需求 能够保证订购(如果 1 个生产者 + 1 个消费
假设,我有一个由 TabHost 组成的选项卡 Activity 。 TabHost 包含 2 个选项卡,每两个选项卡都有一个 Activity 组。每个 Activity 组包含一项 Activit
我正在开发一个应用程序,我需要根据某些操作导航到特定 Activity 。这是一张图片 我的第一个 Activity 是 ReadingActivity。基于某些操作,用户将被带到 NewProjec
我创建了一个与服务器异步通信的应用程序。当应用程序发出服务器请求时,将创建一个带有“正在加载”通知的新对话框( Activity )。主要 Activity 实现了处理服务器响应的方法,我想在主要 A
我想在我的所有应用程序 Activity 中显示相同的选项菜单。我创建了一个实现菜单的通用 Activity ,并且我所有的进一步 Activity 都扩展了它。 问题:当我需要扩展其他特定 Acti
我有四个 Activity ,即 java 文件 - Activity1.java、activity2.java、activity3.java、activity4.java 和 xml 文件 - Ac
我有两个 Activity 。我想将数据从第二个 Activity 发送到上一个 Activity 。第一个 Activity 有自定义 ListView 和 bean 类。当我点击第二个 Activ
根 Activity 是堆栈中当前的第一个 Activity 还是 list 中指定为启动 Activity 的 Activity ? 支持应用程序 P 在启动时启动 Activity A。然后 A
你好 我想知道您在绘制 Activity 图选择“Activity ”时考虑了哪些关键点? 您如何从要建模的问题中选择 Activity ? 谢谢 最佳答案 Activity 图用于对正在开发的系统和
如何从主 Activity 启动 Activity 并在子 Activity 返回主 Activity 中退出操作后返回主 Activity ? 我已将子 Activity 作为启动器 Intent
我的工作流程如下: 登录 Activity -> ActivityB -> ActivityC -> ActivityD 我想将数据从LoginActivity传递到ActivityD,但不直接传递到
我之前曾尝试获得此问题的答案,但找不到可以解决我的问题的答案。我正在制作保存圆盘高尔夫球分数的应用程序。我的 MainActivity 有 4 个按钮。新比赛、恢复比赛、类(class)和球员。 At
我有一个 tts 非 UI 类和 Activity 类。现在在 Activity 类中,我有一个按钮,用户可以从中选择男声或女声,具体取决于我想要将字符串传递给 tts 类的选择,然后一次tts 类根
问题有点复杂,首先, Activity A 和 Activity B 的 list 中都有 android:noHistory = true 。我有一个自定义 serialized 类,假设 MyCl
在我的应用程序中,我有两个 Activity (AuthenticationActivity 和 MainActivity),每个 Activity 都有一个导航图和大量 fragment 。我创建了
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How can i use compose email activity in tabView? 我想在选项
我是一名优秀的程序员,十分优秀!