1

我正在开发Android中的ExpenseManager应用程序,我正在实施fragmentActivity。此fragment显示帐户摘要页面,其中包含帐户余额,帐户上次交易金额等详细信息。FragmentPageAdapter中的相同片段

AccountSummary Activity是用ViewPager,ActionBar,FragmentPageAdapterFragmentActivity实现的多选项卡活动。

摘要页面的布局对所有帐户都是通用的,只有数据会根据用户选择哪个帐户进行更改。

现在,我想实施此活动,我可以在所有帐户或(ActionBar选项卡)中重复使用/复制相同的fragment布局(不是实例)。当用户从actionBar中选择任何选项卡时,它应该加载/显示/显示一个片段以及该帐户数据。 (据我所知,我需要创建动态Fragment不同TagName和需要替换FragmentTransaction的帮助;由于某种原因,此解决方案不起作用)。

这类似于上playstore应用与App布局Url

可能有人发表通过使用示例代码的溶液?我一直在努力寻找解决方案,但似乎没有任何工作。

EDIT

AccountSummaryTabActivity.java

public class AccountSummaryTabActivity extends FragmentActivity implements ActionBar.TabListener { 

    ViewPager viewPager = null; 
    ActionBar actionBar = null; 
    AccountSummaryTabAdapter accSummaryAdapter = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_account_summary_tab); 

     DBHelper dbHelper = new DBHelper(getApplicationContext()); 
     RuntimeExceptionDao<Account, Integer> simpleAccountDao = dbHelper.getSimpleAccountDataDao(); 
     List<Account> accountList = simpleAccountDao.queryForAll(); 

     viewPager = (ViewPager)findViewById(R.id.accountSummaryPager); 
     actionBar = getActionBar(); 
     accSummaryAdapter = new AccountSummaryTabAdapter(getSupportFragmentManager()); 
     accSummaryAdapter.setCount(accountList.size()); 

     viewPager.setAdapter(accSummaryAdapter); 
     actionBar.setHomeButtonEnabled(false); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

     String[] accountNameArr = new String[accountList.size()]; 
     Integer i=1; 
     for (Account account : accountList) { 

      if(account.getIsPrimaryAcc().equalsIgnoreCase("Y")) 
       accountNameArr[0] = account.getName(); 
      else 
       accountNameArr[i++] = account.getName(); 
     } 

     // Adding Tabs 
     for (String accountName : accountNameArr) { 
      actionBar.addTab(actionBar.newTab().setText(accountName).setTabListener(this)); 
     } 

     Intent intent = getIntent(); 
     if(intent.getStringExtra("selectedAccNameTab")==null) 
      intent.putExtra("selectedAccNameTab", accountNameArr[0]); 

     viewPager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg0) { 
       actionBar.setSelectedNavigationItem(arg0); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     System.out.println("onTabSelected "+tab.getText()); 

     DBHelper dbHelper = new DBHelper(getApplicationContext()); 
     RuntimeExceptionDao<Account, Integer> simpleAccountDao = dbHelper.getSimpleAccountDataDao(); 
     List<Account> accountList = simpleAccountDao.queryForAll(); 

     Intent intent = getIntent(); 
     intent.putExtra("selectedAccNameTab", tab.getText()); 

     accSummaryAdapter = new AccountSummaryTabAdapter(getSupportFragmentManager()); 
     accSummaryAdapter.setCount(accountList.size()); 
     viewPager.setAdapter(accSummaryAdapter); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     System.out.println("onTabUnselected "+tab.getText()); 

    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     System.out.println("onTabReselected "+tab.getText()); 
    } 
} 

AccountSummaryTabAdapter.java

public class AccountSummaryTabAdapter extends FragmentPagerAdapter { 

    FragmentManager fm=null; 
    Integer count = 0; 

    public AccountSummaryTabAdapter(FragmentManager fm) { 
     super(fm); 
     this.fm=fm; 
    } 

    public void setCount(Integer count){ 
     this.count=count; 
    } 

    @Override 
    public Fragment getItem(int arg0) { 

     switch (arg0){ 
      default :{ 

       AccountSummaryFragment fragment = new AccountSummaryFragment(); 
       return fragment; 
      } 
     } 
    } 

    @Override 
    public int getCount() { 
     return count; 
    } 
} 

AccountSummaryFragment.java

public class AccountSummaryFragment extends Fragment { 

    public AccountSummaryFragment() { 
     super(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.activity_account_summary, container, false); 

     String accountName = getActivity().getIntent().getStringExtra("selectedAccNameTab"); 

     DBHelper dbHelper = new DBHelper(getActivity()); 
     RuntimeExceptionDao<Account, Integer> simpleAccountDao = dbHelper.getSimpleAccountDataDao(); 
     List<Account> accountList = simpleAccountDao.queryForEq("name", accountName); 

     Account defaultAcc = accountList.get(0); 
     String[] accountNameArr = new String[]{"Monthly","Quaterly","Half Yearly","Yearly"}; 

     TextView balanceTxVw = (TextView) rootView.findViewById(R.id.accountBalanceTxVw); 
     Double balance = defaultAcc.getBalance(); 
     DecimalFormat df = new DecimalFormat("0.00"); 
     balanceTxVw.setText(df.format(balance)); 

     Spinner dropdown = (Spinner)rootView.findViewById(R.id.graphSpinner); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, accountNameArr); 
     dropdown.setAdapter(adapter); 

     return rootView; 
    } 
} 

activity_account_summary_tab.xml版式文件

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/accountSummaryPager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v4.view.ViewPager> 

在此先感谢

+1

你可以发布你的代码吗? – 2014-08-30 18:18:55

+0

我在这里添加了代码。基本上我每次都改变适配器类的重新初始化,选中一个Tab。这样我就可以获得Tab Selected account details。但是,这有一些性能的影响,我可以看到落后时刷卡帐户摘要片段 – vipul12389 2014-08-31 09:04:52

回答

0

解决这个问题最有可能的方式是做到以下几点:

  • 由于大多数帐户的布局相同;
  • 您确实可以使用相同的片段,但是您应该跟踪选择哪个选项卡。
  • 该tab(int)将被传回给TabsPagerAdapter。下一个;
  • 根据该整数值,您应该返回相同的片段,但具有不同的额外值 - 例如说选项卡2.
  • 在您的片段的onAttach中,可以使用getArguments()或extras并切换它以获取该特定片段的正确数据。
  • 使用该特定整数来获得正确的值后,您可以将值分配给类变量 - 这意味着您应该让它们成为类级变量。

我希望能有所帮助。让我知道事情的后续。

+0

那么,没有片段是不固定的。因为用户可以添加他想要的帐号。该适配器适用于固定的碎片数量。我在这里发布了代码,让我知道修改 – vipul12389 2014-08-31 08:29:49

相关问题