我有三个选项卡,选项卡1中的片段列表,我想在选项卡2中将我单击的项目的位置发送到片段2,并将viewpager切换到tab2。我使用一个接口将位置发送到主活动,工作正常,调用片段2中的方法传递它的位置返回空指针异常,并且viewpager不切换。
MainActivity中的方法
<%= form_for @search do |s|%>
<div class="form-group">
<%= check_box "enable", id:"enable", type:"checkbox" %>
<%= s.label :type %>
<%= s.select :type, options_for_select(type_array_search), {}, class:"form-control", id:"type_select", disabled: true %>
</div>
<script type="text/javascript">
$(function () {
var $checkbox = $('#enable'),
$select = $('#type_select');
$checkbox.change(function (e) {
$select.prop('disabled', !$checkbox.is(':checked'))
});
});
</script>
<%= s.submit "Search", class:"btn btn-primary" %>
<% end %>
My FragmentPagerAdapter
@Override
public void respond(int i) {
Toast.makeText(MainActivity.this,"INSIDE MAINACTIVITY AND i = "+i,Toast.LENGTH_SHORT).show();
try {
Bundle args = new Bundle();
args.putInt("chapters",i);
PhpFragment f2 = new PhpFragment();
f2.setArguments(args);
actionBar = getActionBar();
actionBar.setSelectedNavigationItem(1);
viewPager.setCurrentItem(1);
}catch (Exception ex){
Toast.makeText(MainActivity.this,"Error from MAIN = "+ ex.toString(),Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:0)
如果我按照你的问题......你应该调查它。
fragments communication in view pager
或者另一个技巧是..
您正在使用ViewPager,您可以利用它。您可以将标记添加到ViewPager,如下所示:
<强>活动:强>
pager.setTag("some text"); // pager is a ViewPager object
然后你可以通过ViewGroup在这样的片段中获取这些数据:
<强>片段:强>
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
String result = container.getTag().toString();
// do something with the result
return view;
您还可以将setTag()设置为片段中的容器。
另一个解决方案(到目前为止未提及)是通过SharedPreferences发送数据,但如果可能,我建议使用标记。