简体   繁体   English

如何使我的按钮在Fragments,ViewPager中执行某些操作

[英]How can I make my button to do something in Fragments,ViewPager

First I must say that I'm not good at English and "completely new" to Android Programming. 首先,我必须说我不擅长英语和Android编程的“全新”。

I want to create an app like Android's home screen which can slide left-right to see the views. 我想创建一个类似于Android主屏幕的应用程序,它可以左右滑动以查看视图。 On my app, each view will have a button to do something; 在我的应用程序中,每个视图都有一个按钮来执行某些操作; Now I have accomplished the sliding part by using ViewPager and Fragments. 现在我已经使用ViewPager和Fragments完成了滑动部分。 When I run my app, it can smoothly go left-right views but I can't find the solution to make a button in each view to working. 当我运行我的应用程序时,它可以顺利地进入左右视图,但我找不到解决方案,使每个视图中的按钮工作。 How can I do this? 我怎样才能做到这一点? Thank you very much for every of your answers. 非常感谢您的每一个答案。 Followings are my code(I modified it from examples over the internet). 以下是我的代码(我通过互联网上的示例对其进行了修改)。

This the main fragment class that contains many fragments in it. 这是包含许多片段的主片段类。

public class LessonsActivity extends FragmentActivity{
/** maintains the pager adapter */
private PagerAdapter mPagerAdapter;

/*
 * (non-Javadoc)
 * 
 * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.viewpager_layout);
    // initialsie the pager
    this.initialisePaging();
}

/**
 * Initialise the fragments to be paged
 */
private void initialisePaging() {

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, Lesson_1.class.getName()));
    fragments.add(Fragment.instantiate(this, Lesson_2.class.getName()));
    fragments.add(Fragment.instantiate(this, Lesson_3.class.getName()));
    fragments.add(Fragment.instantiate(this, Lesson_4.class.getName()));
    this.mPagerAdapter = new PagerAdapter(
            super.getSupportFragmentManager(), fragments);
    //
    ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
    pager.setAdapter(this.mPagerAdapter);

}

} }

This below is the fragment class that I used to display the layout. 下面是我用来显示布局的片段类。

public class Lesson_1 extends Fragment {
/**
 * (non-Javadoc)
 * 
 * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
 *      android.view.ViewGroup, android.os.Bundle)
 */
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (container == null) {
        // We have different layouts, and in one of them this
        // fragment's containing frame doesn't exist. The fragment
        // may still be created from its saved state, but there is
        // no reason to try to create its view hierarchy because it
        // won't be displayed. Note this is not needed -- we could
        // just run the code below, where we would create and return
        // the view hierarchy; it would just never be used.
        return null;
    }
    return (LinearLayout) inflater.inflate(R.layout.lessons1, container,
            false);

}

} }

And this is my PagerAdapterClass 这是我的PagerAdapterClass

public class PagerAdapter extends FragmentPagerAdapter {

private List<Fragment> fragments;
/**
 * @param fm
 * @param fragments
 */
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
    super(fm);
    this.fragments = fragments;
}
/* (non-Javadoc)
 * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
 */
@Override
public Fragment getItem(int position) {
    return this.fragments.get(position);
}

/* (non-Javadoc)
 * @see android.support.v4.view.PagerAdapter#getCount()
 */
@Override
public int getCount() {
    return this.fragments.size();
}

} }

In your Fragment , in the method onCreateView() you're returning the view for a specific Fragment . Fragment ,在onCreateView()方法中,您将返回特定Fragment的视图。 This means you can manipulate it. 这意味着你可以操纵它。 Instead of immediately returning the (inflated) view, put it in a variable and manipulate that variable, like so: 而不是立即返回(膨胀的)视图,将其放在变量中并操纵该变量,如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    if (container == null) {
        ...
        return null;
    }

    LinearLayout mLinearLayout = (LinearLayout) inflater.inflate(R.layout.lessons1,
                    container, false);

    // note that we're looking for a button with id="@+id/myButton" in your inflated layout
    // Naturally, this can be any View; it doesn't have to be a button
    Button mButton = (Button) mLinearLayout.findViewById(R.id.myButton);
    mButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // here you set what you want to do when user clicks your button,
            // e.g. launch a new activity
        }
    });

    // after you've done all your manipulation, return your layout to be shown
    return mLinearLayout;
}
public class EmpresasFragment extends Fragment 
{   
    private LinearLayout lLayoutFrgEmpresas;
    private Button btnNewEmpresa;
    private Button btnMapEmpresas;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {           
        lLayoutFrgEmpresas=(LinearLayout) inflater.inflate(R.layout.fragment_empresas, container, false);
        btnNewEmpresa=(Button) lLayoutFrgEmpresas.findViewById(R.id.frEmp_nuevaEmpresa);
        btnNewEmpresa.setOnClickListener(new View.OnClickListener() 
        {               
            @Override
            public void onClick(View arg0) 
            {
                Log.d(getClass().getCanonicalName(),"Se ha presionado el botton de nueva empresa");
            }
        });
        return lLayoutFrgEmpresas; 
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM