2016-08-14 4 views
0

이 질문이 다른 사람들이 예상하는 것처럼 흥미롭지 않은 경우 사전 사과드립니다. 첫째, Android Studio (버전 2.1.2)의 최신 버전에 대한 많은 답변이 없습니다. 또한 사람들이 IDE에서 제공하는 템플릿을 거의 사용하지 않는다는 것을 알았습니다 (개발 프로세스의 속도를 높이기 위해이 도구가 있다고 생각합니다).탭이있는 활동 템플릿 Android 2.1.2

탭 활동 서식 파일의 코드는 어떻게 수정합니까? 현재 IDE에서 생성 한 코드를 템플릿으로보고 있습니다. 나는 그것이 단조롭게 3 부분에 대한 단편을 포함하도록 modfiy하는 방법을 단서입니다. 필자는 코드를 넘어서서 구조와 파트가하는 일을 어느 정도 이해하지만 공식적인 문서가 사람들에게 처음부터 어떻게해야하는지와 완전히 다른 방식으로 그렇게합니다.

하나의 조각을 만들었으며 두 조각을 더 만들 수 있기를 바랍니다. 템플릿을 사용하여 탭 안에 어떻게 배치합니까?

누군가 나를 초대해 주실 수 있습니까? 또한 이와 관련하여 유용한 자료를 알려주시겠습니까?

현재 구조에서 Ok. Activity 및 기본 조각 (자리 표시 자 조각이라고 함)에 대한 코드가 .java 파일에 있음을 알 수 있습니다. onCreateView()에서 기본 조각을 호출하여 내 조각 중 하나를 기본 조각으로 대체하려고했습니다. 문제는 다른 단편을 추가하는 방법입니다. 템플릿 코드 :

된 .java 파일은

package name; 
public class myUI extends AppCompatActivity { 

/** 
* The {@link android.support.v4.view.PagerAdapter} that will provide 
* fragments for each of the sections. We use a 
* {@link 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}. 
*/ 
private SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
private ViewPager mViewPager; 

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_my_UI, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    private static final String ARG_SECTION_NUMBER = "section_number"; 

    public PlaceholderFragment() { 
    } 

    /** 
    * Returns a new instance of this fragment for the given section 
    * number. 
    */ 
    public static PlaceholderFragment newInstance(int sectionNumber) { 
     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_my_UI, container, false); 
     TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
     textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
     return rootView; 
    } 
} 

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

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

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "SECTION 1"; 
      case 1: 
       return "SECTION 2"; 
      case 2: 
       return "SECTION 3"; 
     } 
     return null; 
    } 
} 
} 

그것은 거기에 하나 개의 조각 XML 레이아웃이지만,이 트릭을 통해 그것을 복제하는 데 사용되는 것 같습니다, 나 생각이이 된 .java 파일입니다 세 개의 탭 (TextView 구성 요소 포함). 제 질문은 이것입니다. (자신의 행동으로) 내 자신의 단편을 만들었는데, 어떻게 그들을 TabbedActivity의 일부로 만들 수 있습니까? 코드의 어느 부분에 넣을 까? 또한별로 문제가되지 않으면 누군가 코드에서 실제로 무엇이 일어나는지 설명 할 수 있습니까? (단편 조각이 세 번 나타나는 영역을 의미합니까?)

활동 자체에 대한 XML 레이아웃이 아래에 나와 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.myProject.myProject.MyUI"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="@dimen/appbar_padding_top" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways" 
     app:popupTheme="@style/AppTheme.PopupOverlay"> 

    </android.support.v7.widget.Toolbar> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="end|bottom" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 
+0

"탭 작업 서식 파일의 코드를 수정하려면 어떻게해야합니까?" 템플릿은 Android Studio 버전에 따라 다르므로 혼란스러워하는 코드를 포함하도록 질문을 편집하여 이해하지 못하는 것을 구체적으로 지적하십시오. 그런 식으로,이 질문은 당신뿐만 아니라 다른 사람들에게도 도움이 될 것입니다. 게다가,이 템플릿에 대한 코드는 암기 된 사람이 거의 없습니다. – CommonsWare

+0

코드 샘플을 포함시키지 않았습니다! 나는 [좋은 질문을하는 법을 어떻게 읽습니까?] (http://stackoverflow.com/help/how-to-ask)를 읽는 것이 좋습니다. –

+0

@CommonsWare 감사합니다. 코드를 붙여서 자세히 설명하겠습니다. 내 게시물을 수정하겠습니다. – user3650467

답변

0

나는이 질문이 1 년이되어 다른 사람에게 도움이 되었길 바란다. 나는 당신이 이미 알아 냈다고 생각한다. 실제로 그렇게 어렵지는 않습니다. 처음에는 템플릿이 압도적 이었지만 충분히주의를 기울여 이해할 수 있습니다. 어쨌든, 여기 간다 : 나는 눈치

우선 코드의 조각 : 당신이 getCount()에서 수익을 변경하는 경우

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

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position) { 
     case 0: 
      return "SECTION 1"; 
     case 1: 
      return "SECTION 2"; 
     case 2: 
      return "SECTION 3"; 
    } 
    return null; 
} 

에, 말, 2; 사례 2 :getPageTitle (int 위치) 아래에 삭제하면 활동에 탭이 두 개만 표시됩니다.

객체는 순서대로 호출되는 : 첫째, SectionsPageAdapter에서 onCreate()에서 인스턴스화.

@Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

당신이 볼 수 있듯이,이 사용자가 지정한 모든 탭의 새로운 인스턴스에 대한 PlaceholderFragment 요청이이 메소드를 호출 끝납니다. 여기서 아무 것도 변경할 필요가 없습니다.지금은, 인수 (sectionNumber)를 정의를 설정하고 조각을 반환처럼

/** 
    * Returns a new instance of this fragment for the given section 
    * number. 
    */ 
    public static PlaceholderFragment newInstance(int sectionNumber) { 
     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     return fragment; 
    } 

그래서, 그것은 보인다 ... 이제 PlaceholderFragment.newInstance (INT sectionNumber) 가자. 여기에서 아무 것도 변경할 필요가 없습니다. 그런 다음 아직 보지 못한 유일한 방법에 따라 달라집니다. onCreateView (LayoutInflater inflater, ViewGroup 컨테이너, Bundle savedInstanceState). 그리고 Bundle 인수를 인수로 취하기 때문에 의미가 있습니다. 살펴 보겠습니다 :

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
     textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
     return rootView; 
    } 

모든 조각의 내용이 여기에 정의되어 있습니다. 따라서 여기에서 변경하는 것이 이치에 맞을 것입니다.

내가 내 프로젝트를 변경하는 방법의 예입니다
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView; 
     TextView textView; 
     switch (getArguments().getInt(ARG_SECTION_NUMBER)) { 
      case 1: 
       rootView = inflater.inflate(R.layout.fragment_infraestructuras, container, false); 
       textView = (TextView) rootView.findViewById(R.id.section_label1); 
       textView.setText("Infraestructuras"); 
       return rootView; 
      case 2: 
       rootView = inflater.inflate(R.layout.fragment_incidentes, container, false); 
       textView = (TextView) rootView.findViewById(R.id.section_label2); 
       textView.setText("Incidentes"); 
       return rootView; 
     } 
     return null; 
    } 

내가 각 탭에 대한 새로운 레이아웃을 만들었습니다.