如何使用setcontent使用按钮更改内容视图

Jos*_*rau 2 android view android-activity setcontentview

我已经看过很多关于如何更改Android屏幕的教程,但我无法理解/完成工作所有这些都可以帮助我完成我的项目.我有四个xml文件,所有这些文件都有三个按钮,但只有两个用于设置页面.我可以让应用程序加载任何一个其他页面(但然后无法建立按钮)(重要的一点).任何帮助表示赞赏.

package com.store.shrek2;


import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
int activityloaded = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    Button button1 = (Button) this.findViewById(R.id.button1);
    Button button2 = (Button) this.findViewById(R.id.button2);
    Button button3 = (Button) this.findViewById(R.id.button3);
    Button button4 = (Button) this.findViewById(R.id.button4);
    Button button5 = (Button) this.findViewById(R.id.button5);
    Button button6 = (Button) this.findViewById(R.id.button6);
    if(activityloaded == 1){
    button1.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
        }});
    button2.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            activityloaded = 2;
        }});
    button3.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            activityloaded = 4;
            setContentView(R.layout.activity4);
        }});
    }
    if(activityloaded == 2){
    setContentView(R.layout.activity2);
    button4.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.activity3);
        }});
    }
    }
 }



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.store.shrek2"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".activity2"></activity>
    <activity android:name=".activity3"></activity>
    <activity android:name=".activity4"></activity>
</application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

Een*_*ble 6

请按照这些说明了解如何解决您的问题.

  • 首先,创建一个活动 - 称之为MainActivity
  • 其次,创建你的片段 - 取决于它们的数量:
  • 第三,为这些片段创建各自的xml文件.
  • 第四,假设您拥有的所有片段包含完全不同类型的视图 - 如果它们不包含,您可以重复使用片段并减少它们的数量.
  • 我认为你的按钮在主视图中 - 从那里你可以触摸它们以切换到新的布局等.

由于您将使用主要活动来管理碎片,

  • 实现单击侦听器并将其附加到按钮.
  • 其次,切换按钮的id(使用switch语句),当单击给定按钮时,
  • 创建相应片段的新实例并进行设置,换句话说,加载它以查看(添加).您可以选择将其添加到Backstack,以便用户可以使用后退按钮轻松导航回到它.
  • 当有人点击另一个按钮时,比如button2,做同样的事情,就像他们点击button1一样,除了加载正确的片段.
  • 使用片段的重点是能够重用它们.这也可以帮助您避免在您的活动中做太多工作,因为片段可以自己完成所需的一切.

示例代码: MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener
{
    private Button mLoadFragmentOne;
    private Button mLoadFragmentTwo;

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

       setContentView(R.layout.main);

       mLoadFragmentOne = (Button)findViewById(R.id.buttonOne);
       mLoadFragmentTwo = (Button)findViewById(R.id.buttonTwo);

       mLoadFragmentOne.setOnClickListener(this);
       mLoadFragmentTwo.setOnClickListener(this);

    }

    @Override
    public void onClick(View view)
    {
        switch(view.getId())
        {
           case R.id.buttonOne:
               FragmentOne fragmentOne = new FragmentOne();

               loadFragment(fragmentOne, "fragmentOne");

               break;
           case R.id.buttonTwo:
               FragmentTwo fragmentTwo = new FragmentTwo();

               loatFragment(fragmentTwo, "fragmentTwo");

               break;
           default:
               break;
        }
    }

    /**
    * This fragment container will be part of the main view.
    */
    public void loadFragment(Fragment frag, String tag)
    {
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentContainer);
        if(fragment == null)
        {
           ft.add(R.id.fragmentContainer, frag, tag);
        } else 
        {
           ft.replace(R.id.fragmentContainer, frag, tag);
        }
       ft.addToBackStack(null);

       ft.commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

FragmentOne.java

public class FragmentOne extends Fragment
{
   private final String TAG = "com.example.app.FragmentOne";

   private Activity mActivity;

   public void onAttach(Activity act)
   {
     super.onAttach(act);

     this.mActivity = act;
   }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   {
      View view = inflater.inflate(R.layout.fragment_one, container, false);

      //do whatever you want here - like adding a listview or anything

      return view;
   }
}
Run Code Online (Sandbox Code Playgroud)

FragmentTwo.java

public class FragmentTwo extends Fragment
{
   private final String TAG = "com.example.app.FragmentTwo";

   private Activity mActivity;

   @Override
   public void onAttach(Activity act)
   {
      super.onAttach(act);

      this.mActivity = act;
   }

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   {
     View view = inflator.inflate(R.layout.fragment_two, container, false);

     //do whatever you want here - like set text to display in your fragment

     return view;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,您只需使用此代码示例即可完成工作.

这里的要点是创建一个容器 - 一个例子是主视图中的框架布局,给它一个id,并记住这是你的片段将被加载的地方.

您必须添加其他内容,以便用户可以轻松地在视图之间来回导航.

最后,请记住创建两个片段xml文件 - 它们可以包含您希望用户看到的任何内容 - 例如图像,文本和列表或网格.这是你自己的选择.

这就是我可以腾出的时间,我希望它对你有所帮助.

如果您一步一步地遵循这些说明,您应该能够解决您的问题.祝好运.