2014-09-16 14 views
0

탭과 단편 사이의 관계를 만드는 시스템을 개발하려고합니다. 내 코드와보기가 뒤 따른다.단편과 TabListener의 관계

조각은 스 와이프를 관리하고 클릭은 탐색을 직접 클릭합니다.

사용자가 스 와이프 할 때 선택 탭을 수정할 수 있지만 반대는 할 수 없습니다. 탭을 클릭하면보기가 변경됩니다.

내 질문을 이해하고 해결책을 제공해 주시겠습니까?

이 내 주요 활동 : 나는 당신이 그것을 필요로하지만 난 당신이 줄 수 있다고 생각하지 않습니다 http://i.stack.imgur.com/HBKUj.png

: 이것은 내 응용 프로그램의 스크린 샷입니다

public class MainActivity extends FragmentActivity { 

/** 
* The {@link android.support.v4.view.PagerAdapter} that will provide 
* fragments for each of the sections. We use a 
* {@link android.support.v4.app.FragmentPagerAdapter} derivative, which 
* will keep every loaded fragment in memory. If this becomes too memory 
* intensive, it may be best to switch to a 
* {@link android.support.v4.app.FragmentStatePagerAdapter}. 
*/ 
SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
ViewPager mViewPager; 
TextView tw; 
ActionBar myActionBar; 
ArrayList<Category> ListOfCategory; 

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

    myActionBar = getActionBar(); 
    myActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ListOfCategory = new ArrayList<Category>(); 

    try { 
     List<String> categList = new ExecuteJsonLinkTask().execute("http://www.76actu.fr/json.php?d=categories&a=list&key=8smA5YjLG1132zbz301tM94jZO30B7dW").get(); 

     for (String item : categList) { 

      JSONArray jArray = new JSONArray(item); 

      for(int i=0;i<jArray.length();i++){ 

       JSONObject json_data = jArray.getJSONObject(i); 

       Category categ = new Category(); 
       categ.setCategIdSite(json_data.getInt("term_id")); 
       categ.setName(json_data.getString("name")); 
       categ.setMoreArticle(true); 
       categ.setArticleAvailable(false); 

       if(json_data.getInt("term_id") == 89871){ 
        categ.setActive(false); 
       } else categ.setActive(true); 

       Tab tab = myActionBar.newTab(); 
       tab.setText(json_data.getString("name")); 
       Object obj = new Object(); 
       obj = String.valueOf(json_data.getInt("term_id")); 
       tab.setTag(obj); 
       tab.setTabListener(new MyTabListener(getBaseContext())); 
       // tab.setTabListener(new MyTabListener(getBaseContext())); 
       myActionBar.addTab(tab); 

       ListOfCategory.add(categ); 
      } 
     } 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the app. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      myActionBar.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 boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    private ArrayList<Category> ListOfCategory = new ArrayList<Category>(); 
    Fragment fragment; 
    ActionBar myActionBar; 

    public SectionsPagerAdapter(FragmentManager fm){ 
     super(fm); 

     myActionBar = getActionBar(); 

     try { 
      List<String> categList = new ExecuteJsonLinkTask().execute("[API_LINK]").get(); 

      for (String item : categList) { 

       JSONArray jArray = new JSONArray(item); 

       for(int i=0;i<jArray.length();i++){ 

        JSONObject json_data = jArray.getJSONObject(i); 

        Category categ = new Category(); 
        categ.setCategIdSite(json_data.getInt("term_id")); 
        categ.setName(json_data.getString("name")); 
        categ.setMoreArticle(true); 
        categ.setArticleAvailable(false); 

        if(json_data.getInt("term_id") == 89871){ 
         categ.setActive(false); 
        } else categ.setActive(true); 

        ListOfCategory.add(categ); 
       } 
      } 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position); 
     args.putInt("categId", ListOfCategory.get(position).getCategIdSite()); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     // Show total pages. 
     return ListOfCategory.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     return ListOfCategory.get(position).getName(); 
    } 

} 

/** 
* A dummy fragment representing a section of the app, but that simply 
* displays dummy text. 
*/ 
public static class DummySectionFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    TextView dummyTextView; 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public DummySectionFragment() { 
    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 
     int position = getArguments().getInt(ARG_SECTION_NUMBER); 
     dummyTextView.setText(Integer.toString(getArguments().getInt("categId"))); 
     return rootView; 
    } 

} 
public class MyTabListener implements TabListener{ 

    public Context context; 

    MyTabListener(Context context) { 
     this.context = context; 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // HERE 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

    } 
} 
} 

.

덕분에 많은

내 코드에서 http://i.stack.imgur.com/HBKUj.png

답변

1

나는이 솔루션을 가지고 있고 그것은 작동 :

public class MainActivity extends FragmentActivity implements ActionBar.TabListener { 

    public static String TAG="MAIN_ACTIVITY"; 

    public static Context mContext; 
    private ViewPager viewPager; 
    private TabsPagerAdapter mAdapter; 
    private ActionBar actionBar; 
    private String[] tabs = { "FRIENDS", "CHAT", "MAP" }; 



    //ON CREATE METHOD: 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mContext = this; 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     actionBar = getActionBar(); 
     mAdapter = new TabsPagerAdapter(getFragmentManager()); 

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

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

     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) { 
      } 
     }); 
    } 

@Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) 
    { 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft){} 


    @Override 
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {} 

} 

TabsPagerAdapter 클래스 : 당신은이 라인을 추가해야합니다

public class TabsPagerAdapter extends FragmentPagerAdapter 
{ 
    public TabsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int index) { 

     //switch names of your fragments: 
     switch (index) { 

      case 0: 

       return new Stats_Fragment(); 
      case 1: 

       return new FightsFragment(); 
      case 2: 

       return new SearchFragment(); 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // get item count - equal to number of tabs 
     return 3; 
    } 
} 
+0

안녕하십니까. TabsPagerAdapter 란 무엇입니까? – Tom59

+0

TabsPagerAdapter는 하위 뷰 (다른 조각)를 유지 관리합니다. 다른보기간에 이동하는 데 사용됩니다. 더 간단합니다 : 어떤 단편이 사용자에게 제공되어야 하는지를 아는 것이 도움이됩니다. –

+0

예, 코드에 SectionsPageAdapter가 있습니다. "viewPager.setCurrentItem (tab.getPosition());"줄을 추가합니다. 그러나 TabListener에서 ... NullPointerException ... – Tom59

0

을 귀하의 활동 xml 파일, 내 경우 :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="example.com.MainActivity"> 

//ADD THIS AND PROBLEM WILL BE SOLVED: 

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

</FrameLayout> 
+0

그리고 조각보기는 무엇입니까? ? – Tom59

+0

조각보기에 추가 된 코드가 없습니다. MainActivity 리소스 파일 (조각을 넣을 활동)에만이 내용을 추가해야합니다. –

+0

다시 작업하지 마십시오 ... Fragment 및 ViewPager의 경우 android.support.V4 ...를 사용합니다 ...? – Tom59