Как я могу заставить свою кнопку что-то делать во Фрагментах, ViewPager - PullRequest
4 голосов
/ 23 марта 2012

Во-первых, я должен сказать, что я не очень хорошо разбираюсь в английском и «совершенно новый» в программировании Android.

Я хочу создать приложение, подобное домашнему экрану Android, которое может перемещаться влево-вправо, чтобы видеть виды. В моем приложении каждый вид будет иметь кнопку, чтобы что-то делать; Теперь я выполнил скользящую часть, используя ViewPager и Fragments. Когда я запускаю свое приложение, оно может плавно переходить в лево-правое представление, но я не могу найти решение, чтобы заставить кнопки в каждом представлении работать. Как я могу это сделать? Большое спасибо за каждый ваш ответ. Ниже приведен мой код (я изменил его из примеров через Интернет).

Это основной класс фрагментов, который содержит много фрагментов.

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

}

}

Ниже приведен класс фрагмента, который я использовал для отображения макета.

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

}

}

А это мой 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();
}

}

Ответы [ 2 ]

24 голосов
/ 23 марта 2012

В вашем Fragment, в методе onCreateView() вы возвращаете представление для определенного Fragment. Это означает, что вы можете манипулировать этим. Вместо того, чтобы немедленно возвращать (раздутое) представление, поместите его в переменную и манипулируйте этой переменной следующим образом:

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;
}
1 голос
/ 14 июня 2013
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; 
    }
}
...