ViewPager添加圆点,循环翻页。fragment的使用

来源:互联网 发布:java 培训班 编辑:程序博客网 时间:2024/05/18 03:54

ViewPager添加圆点,循环翻页,添加标题

对比昨天,与昨天的类似,

public class MainActivity extends Activity {    private ViewPager viewpager;    private List<View> views;    private LayoutInflater mInflater;    private LinearLayout mLinearLayout;    private List<ImageView> mPoint;    private PagerTabStrip mPagerTab;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        viewpager = (ViewPager) findViewById(R.id.viewpager);        mLinearLayout= (LinearLayout) findViewById(R.id.linearlayout_image);        mPagerTab = (PagerTabStrip) findViewById(R.id.pager_tab);        mPagerTab.setBackgroundColor(Color.GRAY);        mPagerTab.setTabIndicatorColor(Color.RED);        mPagerTab.setTextColor(Color.BLUE);        mPagerTab.setDrawFullUnderline(true);        views = new ArrayList<>();        mInflater = getLayoutInflater();        View view1 = mInflater.inflate(R.layout.viewpager_one, null);        View view2 = mInflater.inflate(R.layout.viewpager_two, null);        View view3 = mInflater.inflate(R.layout.viewpager_three, null);        View view4 = mInflater.inflate(R.layout.viewpager_one, null);        views.add(view1);        views.add(view2);        views.add(view3);        views.add(view4);        mPoint=new ArrayList<>();        for (int i = 0;i<4;i++){            ImageView iv1 = new ImageView(this);            iv1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));            iv1.setImageResource(R.mipmap.eii);            iv1.setPadding(20,20,20,20);            mPoint.add(iv1);            mLinearLayout.addView(iv1);        }        mPoint.get(0).setImageResource(R.mipmap.eia);        ViewPagerAdapter myPager=new ViewPagerAdapter(views);        viewpager.setAdapter(myPager);        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                for (ImageView iv : mPoint) {                    iv.setImageResource(R.mipmap.eii);                }                mPoint.get(position % views.size()).setImageResource(R.mipmap.eia);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });        viewpager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%views.size());    }    @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_main, 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);    }}

添加标题时需要复写一个方法getPageTitle

public class ViewPagerAdapter extends PagerAdapter {    private List<View> views;    private String[] titles = {"标题1","标题2","标题3","标题4"};    @Override    public CharSequence getPageTitle(int position) {        return titles[position%titles.length];    }    public ViewPagerAdapter(List<View> views){        this.views = views;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View arg0, Object arg1) {        return arg0==arg1;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {//      super.destroyItem(container, position, object);//        container.removeView(views.get(position));    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        // TODO Auto-generated method stub        View view = views.get(position%views.size());        if (view.getParent()!=null){            container.removeView(view);        }        container.addView(view);        if(position==2){            Button btn = (Button) view.findViewById(R.id.pager_button);            btn.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(v.getContext(), "点击了按钮", Toast.LENGTH_LONG).show();                }            });        }        return view; //views.get(position%views.size());    }}

三页的布局文件没有在此给出

<RelativeLayout 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="com.example.myviewpager.MainActivity" >    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="match_parent">        <android.support.v4.view.PagerTabStrip            android:id="@+id/pager_tab"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="bottom">        </android.support.v4.view.PagerTabStrip>    </android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/linearlayout_image"        android:orientation="horizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:gravity="center_horizontal"        android:layout_margin="40dp">    </LinearLayout></RelativeLayout>

Fragment的使用

实现将第三个碎片的输入文本显示在第二个碎片上,Activity必须继承FragmentActivity。另外注意支持包的导入,使用support v4包

public class MainActivity extends FragmentActivity implements View.OnClickListener{    private FrameLayout mFrameLayout;    private Button mButton1;    private Button mButton2;    private Button mButton3;    private MyFirstFragment myFirstFragment;    private MySecondFragment mySecondFragment;    private MyThirdFragment myThirdFragment;    private FragmentManager mFragmentmanager;    private FragmentTransaction transaction;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mFrameLayout = (FrameLayout) findViewById(R.id.framelayout);        mButton1 = (Button) findViewById(R.id.button1);        mButton2 = (Button) findViewById(R.id.button2);        mButton3 = (Button) findViewById(R.id.button3);        mButton1.setOnClickListener(this);        mButton2.setOnClickListener(this);        mButton3.setOnClickListener(this);        mFragmentmanager = getSupportFragmentManager();        myFirstFragment = new MyFirstFragment();        mySecondFragment = new MySecondFragment();        myThirdFragment = new MyThirdFragment();        transaction = mFragmentmanager.beginTransaction();        transaction.add(R.id.framelayout,myFirstFragment);        transaction.add(R.id.framelayout,mySecondFragment);        transaction.add(R.id.framelayout,myThirdFragment);        transaction.hide(myFirstFragment);        transaction.hide(mySecondFragment);        transaction.commit();    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.button1:                transaction = mFragmentmanager.beginTransaction();                transaction.hide(mySecondFragment);                transaction.hide(myThirdFragment);                transaction.show(myFirstFragment);                transaction.commit();                break;            case R.id.button2:                transaction = mFragmentmanager.beginTransaction();                String text = myThirdFragment.getText();                mySecondFragment.setText(text);                transaction.hide(myFirstFragment);                transaction.hide(myThirdFragment);                transaction.show(mySecondFragment);                transaction.commit();                break;            case R.id.button3:                transaction = mFragmentmanager.beginTransaction();                transaction.hide(myFirstFragment);                transaction.hide(mySecondFragment);                transaction.show(myThirdFragment);                transaction.commit();                break;            default:                break;        }    }    @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_main, 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);    }}
public class MyFirstFragment extends Fragment {    private Button mButtonTest;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_test,null);        mButtonTest = (Button) view.findViewById(R.id.button);        mButtonTest.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Toast.makeText(getActivity(),"点击了按钮",Toast.LENGTH_SHORT).show();            }        });        return view;    }}
public class MySecondFragment extends Fragment {    private Button mButtonTest;    private TextView mTextView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_sec,null);        mTextView = (TextView) view.findViewById(R.id.textview);        return view;    }    public void setText(String text){            mTextView.setText(text);    }}
public class MyThirdFragment extends Fragment {    private Button mButtonTest;    private EditText mEditText;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_third,null);        mEditText = (EditText) view.findViewById(R.id.edittext);        return view;    }    public String getText(){        String s = null;        if (mEditText!=null){            s=mEditText.getText().toString();        }        return s;    }}

三个fragment的布局文件没有给出

<RelativeLayout 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=".MainActivity">    <FrameLayout        android:id="@+id/framelayout"        android:layout_width="match_parent"        android:layout_height="match_parent"></FrameLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:gravity="center">        <Button            android:id="@+id/button1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="碎片1"/>        <Button            android:id="@+id/button2"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="碎片2"/>        <Button            android:id="@+id/button3"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="碎片3"/>    </LinearLayout></RelativeLayout>
0 0
原创粉丝点击