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

问题描述 投票:0回答:2

我看过很多关于如何更改 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>
android android-activity view setcontentview
2个回答
7
投票

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

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

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

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

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

               loadFragment(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,并记住这是您的片段将被加载的地方。

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

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

这就是我能抽出时间做的事情,希望对你有帮助。

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


2
投票

setCoententView(int layout) 应该在所有语句之前调用,否则将不起作用.. 您有两种选择来做您想做的事:

  1. 使用 android 片段机制,这是最好的方法或
  2. 每个布局文件使用一个 Activity。
© www.soinside.com 2019 - 2024. All rights reserved.