0

我對android非常陌生,我試圖動態創建滑動選項卡並添加可視化頁面,即片段到視圖尋呼機。 我看到了一些教程,並嘗試了一些東西。 我粘貼下面的代碼相同。Android:動態視圖尋呼機只顯示第一個片段的變化

這是我米添加到viewpager

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import technovators.mahendraprophecy.R; 

/** 
* A simple {@link android.app.Fragment} subclass. 
*/ 
public class SUB_LIST_FRAGMENT extends android.support.v4.app.Fragment { 

    static String category; 

    public SUB_LIST_FRAGMENT() { 
     // Required empty public constructor 
    } 
    public static final SUB_LIST_FRAGMENT newInstance(String message) 

    { 
     category=message; 
     SUB_LIST_FRAGMENT f = new SUB_LIST_FRAGMENT(); 
     Bundle bdl = new Bundle(1); 
     return f; 
    } 


    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
     Toast.makeText(getActivity(),category,Toast.LENGTH_LONG).show(); 
     ((TextView) getActivity().findViewById(R.id.cat)).setText(category); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.sub_list_fragment, container, false); 
    } 

} 

這是具有連接到它

public class LATEST_NEWSLETTERS extends android.support.v4.app.Fragment { 


    MaterialTabs subTabs; 
    ViewPager subPager; 
    private String[] titles = new String[]{"Weekly Newsletter", "Market News & Updates", "Day Trade Flash News"}; 
    ArrayList<String> headers,header_colors,category_ids; 
    List<Fragment> fList; 
    public LATEST_NEWSLETTERS() 
    { 

    } 

    public LATEST_NEWSLETTERS(String categoryData) 
    { 
     try 
     { 
      JSONObject object=new JSONObject(categoryData); 
      JSONArray array=object.getJSONArray("categories"); 
      headers=new ArrayList<>(); 
      header_colors=new ArrayList<>(); 
      category_ids=new ArrayList<>(); 
      fList = new ArrayList<Fragment>(); 

      for(int i=0;i<array.length();i++) 
      { 
       object=array.getJSONObject(i); 
       headers.add(object.getString("name")); 
       header_colors.add(object.getString("bgcolor")); 
       category_ids.add(object.getString("cat_id")); 
       fList.add(SUB_LIST_FRAGMENT.newInstance(object.getString("cat_id"))); 
      } 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    void setupTabs() 
    { 
     subTabs= (MaterialTabs) getActivity().findViewById(R.id.subTabs); 
     subPager= (ViewPager) getActivity().findViewById(R.id.subPager); 
     latestNewLetterAdapter adapter=new latestNewLetterAdapter(getFragmentManager()); 
     subPager.setAdapter(adapter); 
     subTabs.setViewPager(subPager); 
     subTabs.setIndicatorColor(Color.parseColor(header_colors.get(0))); 
     subTabs.setTextColorSelected(Color.parseColor(header_colors.get(0))); 

     subPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 
     { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) 
      { 
       subTabs.setIndicatorColor(Color.parseColor(header_colors.get(position))); 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.mainfragment_latest_newsletters, container, false); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setupTabs(); 
    } 


    class latestNewLetterAdapter extends FragmentStatePagerAdapter implements MaterialTabs.CustomTabProvider 
    { 
     public latestNewLetterAdapter(FragmentManager fm) 
     { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) 
     { 
      return fList.get(position); 
     } 


     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // TODO Auto-generated method stub 

     } 

/* 
     @Override 
     public CharSequence getPageTitle(int position) 
     { 
      String x=headers.get(position); 
      if(x.contains("&")) 
      { 
       x=x.replaceAll("&amp;"," & "); 
      } 
      return x; 
     } 
*/ 
     @Override 
     public int getCount() 
     { 
      return headers.size(); 
     } 

     @Override 
     public View getCustomTabView(ViewGroup viewGroup, int i) { 
      TextView header=new TextView(getActivity()); 
      String x=headers.get(i); 
      if(x.contains("&")) 
      { 
       x=x.replaceAll("&amp;"," & "); 
      } 
      header.setTextColor(Color.parseColor(header_colors.get(i))); 
      header.setText(x); 
      header.setGravity(Gravity.CENTER); 
      return header; 
     } 
    } 
} 

我的標籤和一個viewpager主片段的片段類m在前一個活動中使用Async Task從服務器中檢索json(json-array)數據,並以構造函數中的字符串形式將它傳遞給這個分支。

適配器使用標題填充標籤,並從片段類的自定義構造函數中創建的片段列表中獲取項目,我也讀過使用自定義構造函數不是一個好習慣,我將實現接口同樣的目的,但這不是這裏的主要問題。

問題

如果你看到,我爲傳遞類ID到viewpager的每個片段,並應設置相應類別中的每個片段,但這裏所發生的只是設置中的id第一個片段或稱它爲第一個標籤休息所有片段只顯示文本「類別ID」,而不是要設置的類別,而不是當我滑動到第二個片段時,第二個片段的代碼ID在第一個片段中設置,當我滑動到第三個片段第三個的類別ID設置爲第一個

所以基本上所有的動作都發生在fi只有第一個片段而不是全部。

請幫我在哪裏我錯了嗎? 我需要添加動態頁面,因爲每次類別的數量都不一樣,因此應該將頁面數添加到視圖尋呼機,並且每個頁面中都會加載一個對應於該頁面的類別ID的列表。

回答

0

在您的SUB_LIST_FRAGMENT中,嘗試將您的代碼從onActivityCreated移動到onCreateView。結果應該是這個樣子:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View inflatedView = inflater.inflate(R.layout.sub_list_fragment, container, false); 
    ((TextView) inflatedView.findViewById(R.id.cat)).setText(category); 
} 

可能onActivityCreated而onCreateView將每一個新片段在viewpager創建的時候被調用僅被調用一次。

+0

@哈斯姆讓我試試 –

+0

@哈斯拉姆它做的工作謝謝你。 –

+0

不錯,歡迎來到:) –

相關問題