0

我已经使用 Viewpager 创建了可滑动的选项卡,但由于某种原因,我无法在我的 xml 文件中显示正确的选项卡名称。继承人的类:

dashboard.xml(标签显示的 xml):

 <TabHost  
android:id="@android:id/tabhost"  
android:layout_width="match_parent"  
android:layout_height="match_parent" >  
<LinearLayout  
 android:layout_width="match_parent"  
 android:layout_height="wrap_content"  
 android:orientation="vertical" >  
 <TabWidget  
   android:id="@android:id/tabs"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content" >  
 </TabWidget>  
 <FrameLayout  
   android:id="@android:id/tabcontent"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent" >  
       <FrameLayout  
         android:id="@+id/tab1"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:visibility="gone" />  
       <FrameLayout  
         android:id="@+id/tab2"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:visibility="gone" />  
       <FrameLayout  
         android:id="@+id/tab3"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:visibility="gone" /> 
       <FrameLayout  
         android:id="@+id/tab4"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:visibility="gone" /> 
       <FrameLayout  
         android:id="@+id/tab5"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:visibility="gone" />  
  </FrameLayout>  
  <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="wrap_content"/>  
   </LinearLayout>  
 </TabHost>  

TabsViewPagerFragmentActivity.java:

package com.example.loginandregistration;

IMPORTS 
public class TabsViewPagerFragmentActivity extends Activity implements OnTabChangeListener,     OnPageChangeListener{  
 private TabHost host;  
 private ViewPager pager;  
 @Override  
 public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.dashboard);  
host = (TabHost)findViewById(android.R.id.tabhost);  
pager = (ViewPager) findViewById(R.id.pager);  

 host.setup();  
 TabSpec spec = host.newTabSpec("Create Pic");  
 spec.setContent(R.id.tab1);  
 spec.setIndicator("Create Pic");   
 host.addTab(spec);  

 spec = host.newTabSpec("Send Pic");  
 spec.setContent(R.id.tab2);  
 spec.setIndicator("Send Pic");  
 host.addTab(spec);  

 spec = host.newTabSpec("Create Folder");  
 spec.setContent(R.id.tab3);  
 spec.setIndicator("Create Folder");  
 host.addTab(spec); 

 spec = host.newTabSpec("Feedback");  
 spec.setContent(R.id.tab4);  
 spec.setIndicator("Feedback");  
 host.addTab(spec);  

 spec = host.newTabSpec("Logout");  
 spec.setContent(R.id.tab5);  
 spec.setIndicator("Log Out");  
 host.addTab(spec);  

 pager.setAdapter(new MyPageAdapter(this));  
 pager.setOnPageChangeListener(this);  
 host.setOnTabChangedListener(this);  
 }  
 @Override  
public void onTabChanged(String tabId){  
     int pageNumber = 0;  
     if(tabId.equals("tab1")){  
          pageNumber = 0;  
     } else if(tabId.equals("tab2")){  
          pageNumber = 1;  
     } else{  
          pageNumber = 2;  
     }  
     pager.setCurrentItem(pageNumber);  
}  
@Override  
public void onPageSelected(int pageNumber) {  
     host.setCurrentTab(pageNumber);  
}
@Override
public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

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

补充:

当我在模拟器上运行我的应用程序时,tabhost 不会显示在我的仪表板中。正如你在这里看到的

补充:

这是我的页面适配器:

package com.example.loginandregistration;

IMPORTS

public class MyPageAdapter extends PagerAdapter {  
private Context ctx;  
public MyPageAdapter(Context ctx){  
     this.ctx = ctx;  
}  
@Override  
public Object instantiateItem(ViewGroup container, int position) {  
     TextView tView = new TextView(ctx);  
     position++;  
     tView.setText("Page number: " + position);  
     tView.setTextColor(Color.RED);  
     tView.setTextSize(20);  
     container.addView(tView);  
     return tView;  
}  
@Override  
public int getCount() {  
     return 3;  
}  
@Override  
public boolean isViewFromObject(View view, Object object) {  
     return (view == object);  
}  
}  

另外,我刚刚注意到这一点,但是,我将如何更改编码以便我的选项卡转到其他类?

添加:我现在收到以下七个错误:

Description     Resource    Path    Location    Type
FragmentTab3 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 33 Java Problem
FragmentTab1 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 23 Java Problem
FragmentTab3 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 33 Java Problem
FragmentTab1 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 23 Java Problem
FragmentTab2 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 28 Java Problem
FragmentTab2 cannot be resolved to a type   MyPageAdapter.java  /LoginAndRegistration/src/com/example/loginandregistration  line 28 Java Problem
fm cannot be resolved to a variable TabsViewPagerFragmentActivity.java  /LoginAndRegistration/src/com/example/loginandregistration  line 47 Java Problem

这是我更新的 MyPageAdapter:

package com.example.loginandregistration;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyPageAdapter extends FragmentPagerAdapter {

// Declare the number of ViewPager pages
final int PAGE_COUNT = 3;

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

@Override
public Fragment getItem(int arg0) {
switch (arg0) {

// Open FragmentTab1.java
case 0:
    FragmentTab1 fragmenttab1 = new FragmentTab1();
    return fragmenttab1;

// Open FragmentTab2.java
case 1:
    FragmentTab2 fragmenttab2 = new FragmentTab2();
    return fragmenttab2;

// Open FragmentTab3.java
case 2:
    FragmentTab3 fragmenttab3 = new FragmentTab3();
    return fragmenttab3;
}
return null;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return PAGE_COUNT;

}
}

这是我更新的 TabsViewFragmentActivity:

package com.example.loginandregistration;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.LocalBroadcastManager;
import com.example.loginandregistration.MyPageAdapter;

public class TabsViewPagerFragmentActivity extends FragmentActivity {

// Declare Variables
ActionBar mActionBar;
ViewPager mPager;
Tab tab;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from dashboard.xml
    setContentView(R.layout.dashboard);

    // Activate Navigation Mode Tabs
    mActionBar = getActionBar();
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Locate ViewPager in activity_main.xml
    mPager = (ViewPager) findViewById(R.id.pager);

    // Capture ViewPager page swipes
    ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            // Find the ViewPager Position
            mActionBar.setSelectedNavigationItem(position);
        }
    };

    mPager.setOnPageChangeListener(ViewPagerListener);
    // Locate the adapter class called ViewPagerAdapter.java
    MyPageAdapter viewpageradapter = new MyPageAdapter(fm);
    // Set the View Pager Adapter into ViewPager
    mPager.setAdapter(viewpageradapter);

    // Capture tab button clicks
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {

         @Override
         public void onTabSelected(Tab tab, FragmentTransaction ft) {
             // Pass the position on tab click to ViewPager
             mPager.setCurrentItem(tab.getPosition());
         }

         @Override
         public void onTabUnselected(Tab tab, FragmentTransaction ft) {
             // TODO Auto-generated method stub
         }

         @Override
         public void onTabReselected(Tab tab, FragmentTransaction ft) {
             // TODO Auto-generated method stub
         }
     };



    // Create first Tab
    tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
    mActionBar.addTab(tab);

    // Create second Tab
    tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
    mActionBar.addTab(tab);

    // Create third Tab
    tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
    mActionBar.addTab(tab);

}

}

我试图将我的 FragmentTabs 更改为我正在使用的类(例如 CreatePic.java:

package com.example.loginandregistration;


IMPORTS

public class CreatePic extends View {

//drawing path
private Path drawPath;
//drawing and canvas paint
private Paint drawPaint, canvasPaint;
//initial color
private int paintColor = 0xFF660000, paintAlpha = 255;
//canvas
private Canvas drawCanvas;
//canvas bitmap
private Bitmap canvasBitmap;
//brush sizes
private float brushSize, lastBrushSize;
//erase flag
private boolean erase=false;

public CreatePic(Context context, AttributeSet attrs){
    super(context, attrs);
    setupDrawing();
}

//setup drawing
private void setupDrawing(){

    //prepare for drawing and setup paint stroke properties
    brushSize = getResources().getInteger(R.integer.medium_size);
    lastBrushSize = brushSize;
    drawPath = new Path();
    drawPaint = new Paint();
    drawPaint.setColor(paintColor);
    drawPaint.setAntiAlias(true);
    drawPaint.setStrokeWidth(brushSize);
    drawPaint.setStyle(Paint.Style.STROKE);
    drawPaint.setStrokeJoin(Paint.Join.ROUND);
    drawPaint.setStrokeCap(Paint.Cap.ROUND);
    canvasPaint = new Paint(Paint.DITHER_FLAG);
}

//size assigned to view
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    drawCanvas = new Canvas(canvasBitmap);
}

//draw the view - will be called after touch event
@Override
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
    canvas.drawPath(drawPath, drawPaint);
}

//register user touches as drawing action
@Override
public boolean onTouchEvent(MotionEvent event) {
    float touchX = event.getX();
    float touchY = event.getY();
    //respond to down, move and up events
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        drawPath.moveTo(touchX, touchY);
        break;
    case MotionEvent.ACTION_MOVE:
        drawPath.lineTo(touchX, touchY);
        break;
    case MotionEvent.ACTION_UP:
        drawPath.lineTo(touchX, touchY);
        drawCanvas.drawPath(drawPath, drawPaint);
        drawPath.reset();
        break;
    default:
        return false;
    }
    //redraw
    invalidate();
    return true;

}

//update color
public void setColor(String newColor){
    invalidate();
    //check whether color value or pattern name
    if(newColor.startsWith("#")){
        paintColor = Color.parseColor(newColor);
        drawPaint.setColor(paintColor);
        drawPaint.setShader(null);
    }
    else{
        //pattern
        int patternID = getResources().getIdentifier(
                newColor, "drawable", "com.example.loginandregistration");
        //decode 
        Bitmap patternBMP = BitmapFactory.decodeResource(getResources(), patternID);
        //create shader
        BitmapShader patternBMPshader = new BitmapShader(patternBMP, 
                Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);  
        //color and shader
        drawPaint.setColor(0xFFFFFFFF);
        drawPaint.setShader(patternBMPshader);
    }
}

//set brush size
public void setBrushSize(float newSize){
    float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
            newSize, getResources().getDisplayMetrics());
    brushSize=pixelAmount;
    drawPaint.setStrokeWidth(brushSize);
}

//get and set last brush size
public void setLastBrushSize(float lastSize){
    lastBrushSize=lastSize;
}
public float getLastBrushSize(){
    return lastBrushSize;
}

//set erase true or false
public void setErase(boolean isErase){
    erase=isErase;
    if(erase) drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    else drawPaint.setXfermode(null);
}

//start new drawing
public void startNew(){
    drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR);
    invalidate();
}

//return current alpha
public int getPaintAlpha(){
    return Math.round((float)paintAlpha/255*100);
}

//set alpha
public void setPaintAlpha(int newAlpha){
    paintAlpha=Math.round((float)newAlpha/100*255);
    drawPaint.setColor(paintColor);
    drawPaint.setAlpha(paintAlpha);
}
}

但我得到了一个错误循环。) 我完全不明白如何修复“fm”错误。有人告诉我,在我的 CreatePic 和其他类中他们必须扩展 Fragment,这是真的吗?如果是这样,有没有更简单的方法来做到这一点,这样我就不必重写所有的编码来适应它?

4

1 回答 1

2

尝试使用以下代码构建 ViewPager 选项卡。在 ViewPager 上滑动会显示不同的片段。

activity_main.xml

<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" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </android.support.v4.view.ViewPager>

</RelativeLayout>

MainActivity.java

public class MainActivity extends SherlockFragmentActivity {

    // Declare Variables
    ActionBar mActionBar;
    ViewPager mPager;
    Tab tab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from activity_main.xml
        setContentView(R.layout.activity_main);

        // Activate Navigation Mode Tabs
        mActionBar = getSupportActionBar();
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Locate ViewPager in activity_main.xml
        mPager = (ViewPager) findViewById(R.id.pager);

        // Activate Fragment Manager
        FragmentManager fm = getSupportFragmentManager();

        // Capture ViewPager page swipes
        ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                // Find the ViewPager Position
                mActionBar.setSelectedNavigationItem(position);
            }
        };

        mPager.setOnPageChangeListener(ViewPagerListener);
        // Locate the adapter class called ViewPagerAdapter.java
        ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
        // Set the View Pager Adapter into ViewPager
        mPager.setAdapter(viewpageradapter);

        // Capture tab button clicks
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {

            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                // Pass the position on tab click to ViewPager
                mPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }
        };

        // Create first Tab
        tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create second Tab
        tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create third Tab
        tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
        mActionBar.addTab(tab);

    }

}

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

    // Declare the number of ViewPager pages
    final int PAGE_COUNT = 3;

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

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {

        // Open FragmentTab1.java
        case 0:
            FragmentTab1 fragmenttab1 = new FragmentTab1();
            return fragmenttab1;

        // Open FragmentTab2.java
        case 1:
            FragmentTab2 fragmenttab2 = new FragmentTab2();
            return fragmenttab2;

        // Open FragmentTab3.java
        case 2:
            FragmentTab3 fragmenttab3 = new FragmentTab3();
            return fragmenttab3;
        }
        return null;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return PAGE_COUNT;
    }

}

来源:http ://www.androidbegin.com/tutorial/android-actionbarsherlock-viewpager-tabs-tutorial/

于 2013-09-25T01:37:45.143 回答