从开始按钮片段在另一个片段 [英] Starting fragment from button in another fragment

查看:152
本文介绍了从开始按钮片段在另一个片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我有一个应用程序实现了使用片段操作栏选​​项卡。其中每个标签都与他们每个按钮了自己的看法。我希望能够推出任何一项活动,或从这些按钮另一个片段,以便做各种各样的其他事情。什么我想要做的是如下的例子。 我有我的主要活动,看起来是这样的:

 公共类MainActivity扩展SherlockFragmentActivity {

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    动作条酒吧= getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_TITLE);
    bar.setDisplayHomeAsUpEnabled(真正的);
    bar.setDisplayShowTitleEnabled(真正的);
    bar.setTitle(Newalla基督的教会);

    bar.addTab(bar.newTab()
            .setText(家)
            .setTabListener(新TabListener< HomeFragment>(
                    这个家,HomeFragment.class,NULL)));

    bar.addTab(bar.newTab()
            .setText(饲料)
            .setTabListener(新TabListener< FeedsFragment>(
                    对此,饲料,FeedsFragment.class,NULL)));

    bar.addTab(bar.newTab()
            .setText(领导)
            .setTabListener(新TabListener< LeadershipFragment>(
                    对此,领导力,LeadershipFragment.class,NULL)));

    bar.addTab(bar.newTab()
            .setText(公告)
            .setTabListener(新TabListener< BulletinFragment>(
                    对此,公告,BulletinFragment.class,NULL)));

    bar.addTab(bar.newTab()
            .setText(目​​录)
            .setTabListener(新TabListener< D​​irectoryFragment>(
                    对此,目录,DirectoryFragment.class,NULL)));

如果(savedInstanceState!= NULL){

        bar.setSelectedNavigationItem(savedInstanceState.getInt(标签,0));
    }


}
@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
    案例android.R.id.home:
        在操作栏中//应用程序图标点击;回家
                    意向意图=新的意图(这一点,MainActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(意向);
                    返回true;
    默认:
        返回super.onOptionsItemSelected(项目);
    }
}

@覆盖
保护无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    outState.putInt(标签,getSupportActionBar()
            .getSelectedNavigationIndex());
}

公共类TabListener<吨延伸片断>器物
        ActionBar.TabListener {
    私人最终FragmentActivity mActivity;
    私人最终字符串MTAG;
    私人最终类别< T> mClass;
    私人最终捆绑mArgs;
    私人片段mFragment;

    公共TabListener(FragmentActivity活动,字符串变量,类< T> CLZ,
            捆绑参数){
        mActivity =活动;
        MTAG =标签;
        mClass = CLZ;
        mArgs = ARGS;
        FragmentTransaction英尺= mActivity.getSupportFragmentManager()
                .beginTransaction();

        //检查,看看是否已经有此标签的片段,可能
        //从previously保存的状态。如果是这样,禁用它,因为我们
        //初始状态是一个选项卡不显示。
        mFragment = mActivity.getSupportFragmentManager()
                .findFragmentByTag(MTAG);
        如果(mFragment =空&安培;!&安培;!mFragment.isDetached()){
            ft.detach(mFragment);
        }
    }


    @覆盖
    公共无效onTabSelected(TAB键,FragmentTransaction英尺){
        FT = mActivity.getSupportFragmentManager()
                .beginTransaction();

        如果(mFragment == NULL){
            mFragment = Fragment.instantiate(mActivity,mClass.getName(),
                    mArgs);
            ft.add(android.R.id.content,mFragment,MTAG);
            ft.commit();
        } 其他 {
            ft.attach(mFragment);
            ft.commit();
        }

    }

    @覆盖
    公共无效onTabUnselected(TAB键,FragmentTransaction英尺){
        FT = mActivity.getSupportFragmentManager()
                .beginTransaction();

        如果(mFragment!= NULL){
            ft.detach(mFragment);
            ft.commitAllowingStateLoss();
        }

    }

    @覆盖
    公共无效onTabReselected(TAB键,FragmentTransaction英尺){
    }
}
 }
 

其中一个选项卡中的领导地位。在这个选项卡中,我需要加载的按钮三个不同的列表视图。下面是列表视图和观众,我做出的一个例子。

清单活动

 公共类EldersListActivity扩展SherlockFragmentActivity实现EldersListFragment.ListItemSelectedListener {

 / **第一次创建活动时调用。 * /
 @覆盖
 公共无效的onCreate(包savedInstanceState){
 super.onCreate(savedInstanceState);
 的setContentView(R.layout.listview);
 }

 @覆盖
 公共无效onListItemSelected(INT指数){
EldersListFragment图像浏览=(EldersListFragment)getSupportFragmentManager()
    .findFragmentById(R.id.viewer_fragment);

 如果(图像浏览== NULL ||!imageViewer.isInLayout()){
意图showImage =新的意图(getApplicationContext()
        ViewerActivity.class);
showImage.putExtra(指数,指数);
startActivity(showImage);
 }
}

 }
 

列表片段

 公共类EldersListFragment扩展SherlockListFragment {
私人诠释指数= 0;
私人ListItemSelectedListener selectedListener;

@覆盖
公共无效onListItemClick(ListView的L,视图V,INT位置,长的id){
    指数=位置;
    selectedListener.onListItemSelected(位置);
}

@覆盖
公共无效onActivityCreated(包savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    setListAdapter(ArrayAdapter.createFromResource(getActivity(),
            R.array.elders,android.R.layout.simple_list_item_1));

    如果(savedInstanceState!= NULL){
        指数= savedInstanceState.getInt(索引,0);
        selectedListener.onListItemSelected(指数);
    }
}

@覆盖
公共无效的onSaveInstanceState(包outState){
    super.onSaveInstanceState(outState);
    outState.putInt(指数,指数);
}

@覆盖
公共无效onAttach(活动活动){
    super.onAttach(活动);
    尝试 {
        selectedListener =(ListItemSelectedListener)的活动;
    }赶上(ClassCastException异常E){
        抛出新ClassCastException异常(activity.toString()
                +必须实现ListItemSelectedListener的活动);
    }
}

公共接口ListItemSelectedListener {
    公共无效onListItemSelected(INT指数);
}
 }
 

浏览器活动

 公共类ViewerActivity扩展SherlockFragmentActivity {
 公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        如果(getResources()。getConfiguration()。方向== Configuration.ORIENTATION_LANDSCAPE){
            完();
            返回;
        }

        的setContentView(R.layout.viewer_activity);
        意图launchingIntent = getIntent();
        INT指数= launchingIntent.getIntExtra(索引,0);
        ViewerFragment观众=(ViewerFragment)getSupportFragmentManager()
                .findFragmentById(R.id.viewer_fragment);
        viewer.update(指数);
    }
}
 

浏览器片段

 公共类ViewerFragment扩展SherlockFragment {
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
        捆绑savedInstanceState){
    返回inflater.inflate(R.layout.viewer_fragment,集装箱,假);
}

公共无效更新(INT指数){
    TextView的标题=(TextView中)getView()findViewById(R.id.title)。
    ImageView的形象=(ImageView的)getView()findViewById(R.id.image)。

    的String [] imageTitles = getResources()getStringArray(R.array.elders)。
    的String [] imageLocations = getResources()getStringArray(R.array.elder_images)。

    title.setText(imageTitles [指数]);
    InputStream的是;
    尝试 {
        是= getActivity()getAssets()开(imageLocations [指数])。;
        点阵位图= BitmapFactory.de codeStream(是);
        image.setImageBitmap(位);
    }赶上(IOException异常E){
        Log.e(ViewerFragment,无法解除code图像);
    }
}
 }
 

和最后,在视图中有三个按钮的领导选项卡。每个按钮需要调用不同的列表视图。这里是code和XML文件的。

领导片段

 进口android.content.Intent;
 进口android.os.Bundle;
 进口android.view.LayoutInflater;
 进口android.view.View;
 进口android.view.View.OnClickListener;
 进口android.view.ViewGroup;
 进口android.widget.Button;

 进口com.actionbarsherlock.app.SherlockFragment;

 公共类LeadershipFragment扩展SherlockFragment {

按钮mButton8;
按钮mButton9;
按钮mButton10;

公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,

        捆绑savedInstanceState){

    查看查看= inflater.inflate(R.layout.tab_leadership_layout,集装箱,假);
    返回查看;

}
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        //获取按钮来查看
        mButton8 =(按钮)getView()findViewById(R.id.button8)。
        //设置的onclick监听器当按钮被点击
        mButton8.setOnClickListener(新OnClickListener(){
            //开始新的列表活动
            @覆盖
            公共无效的onClick(视图v){
                意图mainIntent =新的意图(getActivity(),EldersListActivity.class);
                startActivity(mainIntent);
            }
        });

    }

}
 

领导XML文件

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT>


< RelativeLayout的
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:背景=@可绘制/背景>

< ImageView的
    机器人:ID =@ + ID / imageView3
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_alignParentTop =真
    机器人:layout_centerHorizo​​ntal =真
    机器人:layout_marginTop =31dp
    机器人:SRC =@可绘制/铅
    机器人:contentDescription =@字符串/铅/>



<按钮
    机器人:ID =@ + ID /按钮8
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_centerHorizo​​ntal =真
    机器人:layout_centerVertical =真
    机器人:背景=@可绘制/部长/>


<按钮
    机器人:ID =@ + ID / button10
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_centerVertical =真
    机器人:layout_marginLeft =30dp
    机器人:layout_toRightOf =@ + ID /按钮8
    机器人:背景=@可绘制/执事/>

<按钮
    机器人:ID =@ + ID /按钮9
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_centerVertical =真
    机器人:layout_marginRight =30dp
    机器人:layout_toLeftOf =@ + ID /按钮8
    机器人:背景=@可绘制/长老/>

 < / RelativeLayout的>
 < / LinearLayout中>
 

我希望这是因为什么我想要做的。预先感谢您的帮助,您可以提供。我试着研究这个了很多,似乎无法找到任何解释了什么是我想要做的,我刚开始学习的片段,以及使裸露的我,如果你需要我回答任何问题,我会做我最好的回答。再次感谢您

LOG猫强制关闭

  10-18 23:39:34.196:E / AndroidRuntime(9601):致命异常:主要
 10-18 23:39:34.196:E / AndroidRuntime(9601):显示java.lang.NullPointerException
 10-18 23:39:34.196:E / AndroidRuntime(9601):在com.threesixteenapps.newalla.LeadershipFragment.onCreate(LeadershipFragment.java:31)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:835)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.support.v4.app.FragmentManagerImpl $ 1.运行(FragmentManager.java:420)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.os.Handler.handleCallback(Handler.java:587)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.os.Handler.dispatchMessage(Handler.java:92)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.os.Looper.loop(Looper.java:150)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在android.app.ActivityThread.main(ActivityThread.java:4263)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在java.lang.reflect.Method.invokeNative(本机方法)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在java.lang.reflect.Method.invoke(Method.java:507)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 10-18 23:39:34.196:E / AndroidRuntime(9601):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

确定好,应该是很简单的。我假设你有标签和标签片段都工作正常。你想要做的是每个按钮启动一个新的活动(不分段)。你可以使用一个片段,如果你想显示在列表视图旁边的选项卡中的片段,而是因为你想要一个新的屏幕,你使用的活动。

因此​​,在您的按钮的onClick监听器,你只需要创建一个新的意图,并启动它。下面有一些例子code:

 公共类LeaderShipFragment扩展片段{
按钮mButton8;
按钮mButton9;
按钮mButton10;


@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
    ViewGroup中的root =(ViewGroup中)inflater.inflate(R.layout.leadership_fragment,NULL);
    返回根;
}


@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    //获取按钮来查看
    mButton8 = getView()findViewById(R.id.button8)。
    //设置的onclick监听器当按钮被点击
    mButton8.setOnClickListener(新OnClickListener(){
        //开始新的列表活动
        @覆盖
        公共无效的onClick(视图v){
            意图mainIntent =新的意图(getActivity(),Button8ListActivity.class);
            startActivity(mainIntent);
        }
    });
    //获取按钮来查看
    mButton9 = getView()findViewById(R.id.button9)。
    //设置的onclick监听器当按钮被点击
    mButton9.setOnClickListener(新OnClickListener(){
        //开始新的列表活动
        @覆盖
        公共无效的onClick(视图v){
            意图mainIntent =新的意图(getActivity(),Button9ListActivity.class);
            startActivity(mainIntent);
        }
    });
    //获取按钮来查看
    mButton10 = getView()findViewById(R.id.button10)。
    //设置的onclick监听器当按钮被点击
    mButton10.setOnClickListener(新OnClickListener(){
        //开始新的列表活动
        @覆盖
        公共无效的onClick(视图v){
            意图mainIntent =新的意图(getActivity(),Button10ListActivity.class);
            startActivity(mainIntent);
        }
    });

}
 

}

希望这你想要做什么。 Android将处理所有的backstack和活动周期的东西,所以它真的很简单。

Ok I have an app that implements tabs in the action bar using fragments. each of those tabs have their own views with buttons in them each. I want to be able to launch either an activity or another fragment view from those buttons to do various other things. An example of what i'm trying to do would be as follows. I have my main activity which looks like this:

 public class MainActivity extends SherlockFragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    bar.setDisplayHomeAsUpEnabled(true);
    bar.setDisplayShowTitleEnabled(true);
    bar.setTitle("Newalla Church of Christ");

    bar.addTab(bar.newTab()
            .setText("Home")
            .setTabListener(new TabListener<HomeFragment>(
                    this, "Home", HomeFragment.class, null)));

    bar.addTab(bar.newTab()
            .setText("Feeds")
            .setTabListener(new TabListener<FeedsFragment>(
                    this, "Feeds", FeedsFragment.class, null)));

    bar.addTab(bar.newTab()
            .setText("Leadership")
            .setTabListener(new TabListener<LeadershipFragment>(
                    this, "Leadership", LeadershipFragment.class, null)));

    bar.addTab(bar.newTab()
            .setText("Bulletin")
            .setTabListener(new TabListener<BulletinFragment>(
                    this, "Bulletin", BulletinFragment.class, null)));

    bar.addTab(bar.newTab()
            .setText("Directory")
            .setTabListener(new TabListener<DirectoryFragment>(
                    this, "Directory", DirectoryFragment.class, null)));

if (savedInstanceState != null) {

        bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
    }


}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
                    Intent intent = new Intent(this, MainActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("tab", getSupportActionBar()
            .getSelectedNavigationIndex());
}

public class TabListener<T extends Fragment> implements
        ActionBar.TabListener {
    private final FragmentActivity mActivity;
    private final String mTag;
    private final Class<T> mClass;
    private final Bundle mArgs;
    private Fragment mFragment;

    public TabListener(FragmentActivity activity, String tag, Class<T> clz,
            Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;
        FragmentTransaction ft = mActivity.getSupportFragmentManager()
                .beginTransaction();

        // Check to see if we already have a fragment for this tab, probably
        // from a previously saved state. If so, deactivate it, because our
        // initial state is that a tab isn't shown.
        mFragment = mActivity.getSupportFragmentManager()
                .findFragmentByTag(mTag);
        if (mFragment != null && !mFragment.isDetached()) {
            ft.detach(mFragment);
        }
    }


    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft = mActivity.getSupportFragmentManager()
                .beginTransaction();

        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(),
                    mArgs);
            ft.add(android.R.id.content, mFragment, mTag);
            ft.commit();
        } else {
            ft.attach(mFragment);
            ft.commit();
        }

    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft = mActivity.getSupportFragmentManager()
                .beginTransaction();

        if (mFragment != null) {
            ft.detach(mFragment);
            ft.commitAllowingStateLoss();
        }

    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }
}
 }

One of the tabs is leadership. In this tab i need to load three different list views from the buttons. Here is an example of the list view and viewers that i have made.

List Activity

 public class EldersListActivity extends SherlockFragmentActivity implements EldersListFragment.ListItemSelectedListener {

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.listview);
 }

 @Override
 public void onListItemSelected(int index) {
EldersListFragment imageViewer = (EldersListFragment) getSupportFragmentManager()
    .findFragmentById(R.id.viewer_fragment);

 if (imageViewer == null || !imageViewer.isInLayout()) {
Intent showImage = new Intent(getApplicationContext(),
        ViewerActivity.class);
showImage.putExtra("index", index);
startActivity(showImage);
 } 
}

 }

List Fragment

 public class EldersListFragment extends SherlockListFragment{
private int index = 0;
private ListItemSelectedListener selectedListener;

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    index = position;
    selectedListener.onListItemSelected(position);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setListAdapter(ArrayAdapter.createFromResource(getActivity(),
            R.array.elders, android.R.layout.simple_list_item_1));

    if (savedInstanceState != null) {
        index = savedInstanceState.getInt("index", 0);
        selectedListener.onListItemSelected(index);
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("index", index);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        selectedListener = (ListItemSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement ListItemSelectedListener in Activity");
    }
}

public interface ListItemSelectedListener {
    public void onListItemSelected(int index);
}
 }

Viewer Activity

 public class ViewerActivity extends SherlockFragmentActivity {
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            finish();
            return;
        }

        setContentView(R.layout.viewer_activity);
        Intent launchingIntent = getIntent();
        int index = launchingIntent.getIntExtra("index", 0);
        ViewerFragment viewer = (ViewerFragment) getSupportFragmentManager()
                .findFragmentById(R.id.viewer_fragment);
        viewer.update(index);
    }
}

Viewer Fragment

 public class ViewerFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.viewer_fragment, container, false);
}

public void update(int index) {
    TextView title = (TextView) getView().findViewById(R.id.title);
    ImageView image = (ImageView) getView().findViewById(R.id.image);

    String[] imageTitles = getResources().getStringArray(R.array.elders);
    String[] imageLocations = getResources().getStringArray(R.array.elder_images);

    title.setText(imageTitles[index]);
    InputStream is;
    try {
        is = getActivity().getAssets().open(imageLocations[index]);
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        image.setImageBitmap(bitmap);
    } catch (IOException e) {
        Log.e("ViewerFragment", "Failed to decode image");
    }
}
 }

and Finally The leadership tab that in the view has three buttons. Each button needs to call a different list view. Here is the code and xml file for those.

Leadership Fragment

 import android.content.Intent;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.Button;

 import com.actionbarsherlock.app.SherlockFragment;

 public class LeadershipFragment extends SherlockFragment {

Button mButton8;
Button mButton9;
Button mButton10;

public View onCreateView(LayoutInflater inflater, ViewGroup container,

        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.tab_leadership_layout, container, false);
    return view;

}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //get the button view
        mButton8 = (Button) getView().findViewById(R.id.button8);
        //set a onclick listener for when the button gets clicked
        mButton8.setOnClickListener(new OnClickListener() {
            //Start new list activity
            @Override
            public void onClick(View v) {
                Intent mainIntent = new Intent(getActivity(), EldersListActivity.class);
                startActivity(mainIntent);
            }
        });

    }

}

Leadership XML FILE

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">


<RelativeLayout 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background" >

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="31dp"
    android:src="@drawable/lead" 
    android:contentDescription="@string/lead"/>



<Button
    android:id="@+id/button8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:background="@drawable/ministers" />


<Button
    android:id="@+id/button10"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="30dp"
    android:layout_toRightOf="@+id/button8"
    android:background="@drawable/deacons" />

<Button
    android:id="@+id/button9"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginRight="30dp"
    android:layout_toLeftOf="@+id/button8"
    android:background="@drawable/elders" />

 </RelativeLayout>
 </LinearLayout> 

I hope this makes since on what i'm trying to do. Thank you in advance for any help you can offer. I've tried researching this a lot and can't seem to find anything that explains what i'm trying to do and i'm just starting learning fragments as well so bare with me if you need me to answer any questions i will do my best to answer them. Thank you again

LOG CAT FOR FORCE CLOSE

 10-18 23:39:34.196: E/AndroidRuntime(9601): FATAL EXCEPTION: main
 10-18 23:39:34.196: E/AndroidRuntime(9601): java.lang.NullPointerException
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at com.threesixteenapps.newalla.LeadershipFragment.onCreate(LeadershipFragment.java:31)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:835)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.os.Handler.handleCallback(Handler.java:587)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.os.Handler.dispatchMessage(Handler.java:92)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.os.Looper.loop(Looper.java:150)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at android.app.ActivityThread.main(ActivityThread.java:4263)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at java.lang.reflect.Method.invokeNative(Native Method)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at java.lang.reflect.Method.invoke(Method.java:507)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 10-18 23:39:34.196: E/AndroidRuntime(9601):    at dalvik.system.NativeStart.main(Native Method)

解决方案

Ok well that should be really simple. I'm assuming you have the tabs and tab fragments all working correctly. What you want to do is launch a new activity (not fragment) from each button. You would use a fragment if you wanted to display the list view alongside the tab fragment, but because you want a new screen, you use an activity.

So in your buttons onClick Listener you just need to create a new intent and start it. Heres some example code:

public class LeaderShipFragment extends Fragment {
Button mButton8;
Button mButton9;
Button mButton10;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.leadership_fragment, null);
    return root;
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //get the button view
    mButton8 = getView().findViewById(R.id.button8);
    //set a onclick listener for when the button gets clicked
    mButton8.setOnClickListener(new OnClickListener() {
        //Start new list activity
        @Override
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(), Button8ListActivity.class);
            startActivity(mainIntent);
        }
    });
    //get the button view
    mButton9 = getView().findViewById(R.id.button9);
    //set a onclick listener for when the button gets clicked
    mButton9.setOnClickListener(new OnClickListener() {
        //Start new list activity
        @Override
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(), Button9ListActivity.class);
            startActivity(mainIntent);
        }
    });
    //get the button view
    mButton10 = getView().findViewById(R.id.button10);
    //set a onclick listener for when the button gets clicked
    mButton10.setOnClickListener(new OnClickListener() {
        //Start new list activity
        @Override
        public void onClick(View v) {
            Intent mainIntent = new Intent(getActivity(), Button10ListActivity.class);
            startActivity(mainIntent);
        }
    });

}

}

Hopefully that does what you want. Android will handle all the backstack and activity lifecycle stuff, so its really quite simple.

这篇关于从开始按钮片段在另一个片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆