我需要在“新日期碎片”和“新事件框架”之间传递字符串 curDate,我看到很多人使用捆绑包,但使用这些我仍然具有空点例外。
我将日历视图转换为一个名为 curDate 的字符串。
public class NewDateFragment extends Fragment {
public String curDate;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newdate,
container, false);
CalendarView calendar = (CalendarView) view.findViewById(R.id.calendarView);
//sets the listener to be notified upon selected date change.
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int day) {
curDate = day + "/" + month + "/" + year;
NewDateFragment fragment = new NewDateFragment();
Bundle bundle = new Bundle();
bundle.putString("date", curDate);
fragment.setArguments(bundle);
Log.d("Current Date:", curDate);
}
});
}
public class NewEventFragment extends Fragment {
// relative code inside onCreateView
Bundle b = getActivity().getIntent().getExtras();
final String dDate = b.getString("date");
}
我的日志:
threadid=1:线程因未捕获的异常而退出(group=0x41640d88)
谢谢你的帮助!
如果它们是同一活动中的片段,您可以使用该活动轻松访问它们之间的数据。
步骤 1:在活动中
声明字符串 curDate:
public String curDate; //you could also make it private and add a public getter & setter
第2步:在您的NewDateFrament
中,在onSelectedDayChange()
中,将活动的curDate设置为您刚刚计算的当前日期:
getActivity().curDate = curDate;
第3步:在您的NewEventFrament
中,只需从活动中获取值:
public String curDate = getActivity().curDate;
给定答案的替代方法是使用事件。如果你真的想避免耦合你的代码 - 意味着摆脱类之间不必要的依赖性,在你的 Activity 中有一个变量不是一个好主意。这是我的建议:
>
将EventBus库添加到您的Gradle文件中:
compile 'de.greenrobot:eventbus:2.4.0'
创建一个简单的普通旧 java 类来表示您的事件:
public class CalendarDateSelectedEvent{
private String currentDate;
public CalendarDateSelectedEvent(String date){
this.currentDate = date;
}
public String getCurrentDate(){
return currentDate;
}
}
在您选择日期的第一个片段中,您可以在选择日期后立即将事件发布到您的第二个片段中,如下所示:
//somewhere when a date is selected
onSelectedDayChanged(String dateSelected){
EventBus.getDefault().post(new CalendarDateSelectedEvent(dateSelected));
}
最后,在您的第二个片段中,执行以下操作:
//could be inside onCreate(Bundle savedInstanceState) method
@Override
public void onCreate(Bundle saveInstanceState){
//......
EventBus.getDefault().register(this);
}
@Override
public void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
//very important piece here to complete the job
public void onEvent(CalenderDateSelectedEvent event){
String currentDate = event.getCurrentDate();
//you can now set this date to view.
}
在这一点上,你可能会问,为什么所有的哈士奇都有所有这些代码;但答案很简单:活动不必真正知道任何一个片段中发生了什么。您已经消除了代码中不必要的耦合。
如果您曾经更改活动以执行其他操作,则不必更改片段代码。
我希望这能帮助你看到这两种片段之间交流的方法的区别!
第一种方法(您接受的答案涉及三方,而第二种方法仅涉及两方)。这取决于你的选择。
享受!
我有两个动态片段与一个活动相关联,我试图使用Bundle将一个文本从第一个片段传递到第二个片段,但我得到了空指针异常。在两个片段之间传递字符串是正确的方法吗?下面是我的代码:
我试图将一个活动(LensActivity)中的ArrayList中的值传递给我的主活动上的TextView。在这个网站上,我找到了Intent方法并进行了实验,但似乎无法传递它,信息被提取到字符串lensString中,并传递到Intent,但在主活动中似乎没有传递或获取TextView,在一些实验中,由于getIntent在主活动中,我得到了一个空指针。 这是LensActivity的代码,它
背景: 有两项活动 1x(主活动),1x(子活动-具有列表视图的活动) 主活动扩展了碎片活动,信息将在碎片中使用 单击主活动的菜单项时,子活动将打开 为ListView使用HashMap 我的目标: 单击项的HashMap值应发送回主活动,子活动(带有ListView)应关闭 问题: 我认为我犯了一个巨大的错误,但我无法解决它。 从onOptionsItemSelected和onActivityR
我试图在我的android应用程序中的两个活动之间传递数据,我想使用HashMap(我不想使用Intent)。以下是我的代码: DataHolder.java 在第一个活动中设置值 在其他活动中获得价值 当我用它在activity1到activity2之间传递数据时,它会起作用,但在那之后,当在activity2到activity3之间传递数据时,返回null,因此强制转换为(整数)会导致错误。在
我想知道是否有人可以帮助我用Intent修复此错误? 我有两个活动要连接:网格视图“MainActivity.kt”的第一个活动,列表视图“Main2Activity.kt”的第二个活动,我有来自“Main2Activity.kt”的2个对象实例(adapter1,adapter2 ),当单击“MainActivity.kt”中的特定图像时,我想传递特定的对象实例(adapter1)或(adapt
我是第一次使用代码优先的方法。如果我错过了一些非常基本的东西,请原谅我。 我需要传递连接字符串到DB上下文,但我不能将连接字符串app.config,因为我在类本身调用一个金块,它给我连接字符串。 这种做法正确吗?我无法在本地系统上测试此功能。还是我应该把绳子传给基地 类A():基(连接)