Nie*_*els 0 android android-fragments android-tabs
我一直试图从listview-onclicklistener获取一个id到三个标签片段.用户首先单击myTicketsFragment,然后转到包含3个可滑动标签的详细信息页面.这些视图由名为TicketActivity的一个单独活动"托管".所以目前我已经成功地将数据从片段传递到TicketActivity,但我不能做得更远.一直在寻找2个小时但仍然没有结果..
这是我的代码:
myTicketsFragment:将setOnItemClickListener中的数据传递给制表符活动
public void onItemClick(AdapterView<?> parentView,
View childView, int position, long id) {
Bundle bundle = new Bundle();
bundle.putInt("ticketId", myTickets.get(position).getId());
Intent ticketDetail = new Intent(getActivity(), TicketActivity.class);
ticketDetail.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
ticketDetail.putExtras(bundle);
startActivity(ticketDetail);
}
Run Code Online (Sandbox Code Playgroud)
TicketActivity:接收数据并将其传递给3个选项卡
private ViewPager viewPager;
private TicketTabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Info", "Intern", "Extern" };
public TicketInfoFragment ticketInfoFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabs);
// Receive data
Bundle bundle = getIntent().getExtras();
int ticketId = bundle.getInt("ticketId");
// Pass data to fragments
// ...
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TicketTabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
选项卡片段的示例
public class TicketInfoFragment extends Fragment {
TicketFull ticket = new TicketFull();
private DatabaseHelper db;
int ticketId;
String androidId;
String authCode;
String platform_url;
int uId;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
db = new DatabaseHelper(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_ticket_info, container, false);
return rootView;
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我,我会很高兴的
提前致谢
2快速方式:
在您的活动中使用静态方法来检索当前的故障单ID
设计并实现一个接口,并将片段注册为活动中的侦听器
第一个选项,在您的活动中:
private static int ticketId;
public static int getCurrentTicketId(){
return ticketId;
}
Run Code Online (Sandbox Code Playgroud)
在你的片段中你可以做到:
TickerActivity.getCurrentTicketId();
Run Code Online (Sandbox Code Playgroud)
第二个选项,使用界面:
public interface TicketListener{
public void onTicketChanged(int newTicket);
}
Run Code Online (Sandbox Code Playgroud)
并在您的活动中添加:
public List<TicketListener> listeners = new ArrayList<TicketListener>();
public void addListener(TicketListener listener){
listeners.add(listener);
}
Run Code Online (Sandbox Code Playgroud)
并将每个片段注册为新的侦听器
YourFragment frag = new YourFragment();
addListener(frag);
Run Code Online (Sandbox Code Playgroud)
最后当你想通知监听器的密钥迭代列表时:
for(TicketListener listener : listeners){
listener.onTicketChanged(ticket);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4618 次 |
| 最近记录: |