android - 如何使用 setcontent 通过按钮更改内容 View

标签 android android-activity view 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>

最佳答案

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

  • 首先,创建一个 Activity - 将其命名为 MainActivity
  • 其次,创建您的 fragment - 取决于它们的数量:
  • 第三,为这些 fragment 创建各自的 xml 文件。
  • 第四,假设您拥有的所有 fragment 都包含完全不同类型的 View - 如果它们不包含,您可以重用 fragment 并减少它们的数量。
  • 我认为您的按钮位于主视图中 - 您可以在其中触摸它们以切换到新布局等。

由于您将使用您的主要 Activity 来管理您的 fragment ,

  • 实现点击监听器并将其附加到您的按钮。
  • 其次,切换按钮的 id(使用 switch 语句),当给定按钮被点击时,
  • 为您各自的 fragment 创建一个新实例并设置它,或者换句话说,加载它以查看(添加)。您可以选择将它添加到后台堆栈,以便用户可以使用后退按钮轻松导航回它。
  • 当有人点击另一个按钮时,比如 button2,除了加载正确的 fragment 外,执行与他们点击 button1 时相同的操作。
  • 使用 fragment 的目的是能够重用它们。这也有助于您避免在 Activity 中做太多工作,因为 fragment 可以自行完成所有需要的工作。

示例代码: 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();
    }
}

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

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

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

这里的重点是创建一个容器 - 例如主视图中的框架布局,给它一个 id,记住这是你的 fragment 将被加载的地方。

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

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

这就是我能抽出的时间,希望对您有所帮助。

如果您按照这些说明一步步进行,您应该能够解决您的问题。祝你好运。

关于android - 如何使用 setcontent 通过按钮更改内容 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946098/

相关文章:

Android 应用程序级范围变量

java - 如何在 Servlet(从 Android 应用程序发送)中获取数据?

android - 带图像的动态壁纸

java - 无法解析为变量 - Parse.com

java - 从父 Activity 访问 Fragment 对象

android - 从后台进程更新 TabActivity 的子 Activity 的 View

java - 无法解析 : com. google.android.material.material :1. 0

java - 我的应用程序中的 boolean 方法出错

asp.net-mvc - 可以在多个mvc 3项目中共享 View

android - 如何在我的应用程序中获取当前正在运行的 Activity ?