当前位置: 首页 > 编程笔记 >

fragment实现隐藏及界面切换效果

龙越彬
2023-03-14
本文向大家介绍fragment实现隐藏及界面切换效果,包括了fragment实现隐藏及界面切换效果的使用技巧和注意事项,需要的朋友参考一下

在前文中的效果中(Android如何创建自定义ActionBar),点击屏幕下方的 TextView 以此来实现 5 种 fragment 界面的切换。

       由于网络数据的加载存在于不同的界面之中,当快速的切换界面时,就会出现程序的出错。因为快速的切换时,当前界面的数据还在读取,就切换到下一个界面,下一个界面也开始加载数据,每次界面的切换都会加载数据。这样就会出错(在本文中,fragment 是使用 replace() 方法来加载界面的,)。所以可以使每个 fragment 只加载一次来减少数据的加载次数。当然可以使用缓存技术来解决问题。

       本文中只使用 fragment 的隐藏或者加载来实现每个界面只加载一次。这时需要多定义一个 Fragment 变量,以充当中间的变量,来实现 fragment 的隐藏。

       上文中界面切换的效果,其实很简单,即:点击当前 TextView 使其颜色改变,其他的 TextView 的颜色都变为相同颜色即可。这时可以把这些变化封装为一个方法。减少代码量。

 MainActivity.java :

package com.crazy.gemi;
 
import android.app.SearchManager;
import android.content.Intent;
import android.graphics.Color;
import android.provider.SearchRecentSuggestions;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.TextView;
 
import com.crazy.gemi.ui.cheaper.CheaperFragment;
import com.crazy.gemi.ui.cheaper.SearchSuggestionSampleProvider;
import com.crazy.gemi.ui.favor.FavorFragment;
import com.crazy.gemi.ui.more.MoreFragment;
import com.crazy.gemi.ui.near.NearFragment;
import com.crazy.gemi.ui.pocket.PocketFragment;
 
public class MainActivity extends FragmentActivity
    implements View.OnClickListener, CheaperFragment.SearchResult{
 
  private TextView[] textView = new TextView[5];
  private View[] views = new View[5];
  // 其中的 firstFragment 相当于是个中间变量
  private Fragment firstFragment, nearFragment, cheaperFragment, favorFragment, pocketFragmnet, moreFragment;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    init();
    initFragment();
  }
 
  private void init() {
 
    textView[0] = (TextView)findViewById(R.id.near);
    textView[1] = (TextView)findViewById(R.id.search_cheaper);
    textView[2] = (TextView)findViewById(R.id.favor);
    textView[3] = (TextView)findViewById(R.id.pocket);
    textView[4] = (TextView)findViewById(R.id.more);
 
    views[0] = findViewById(R.id.near_top_line);
    views[1] = findViewById(R.id.cheaper_top_line);
    views[2] = findViewById(R.id.favor_top_line);
    views[3] = findViewById(R.id.pocket_top_line);
    views[4] = findViewById(R.id.more_top_line);
 
    textView[0].setOnClickListener(this);
    textView[1].setOnClickListener(this);
    textView[2].setOnClickListener(this);
    textView[3].setOnClickListener(this);
    textView[4].setOnClickListener(this);
 
  }
 
  private void initFragment() {
    firstFragment = FavorFragment.newInstance();
    favorFragment = firstFragment;
    // 最先加载的 fragment
    getSupportFragmentManager().beginTransaction().
        add(R.id.frame_layout, favorFragment).commit();
    textView[2].setTextColor(Color.BLACK);
    views[2].setBackgroundColor(Color.parseColor("#FF6600"));
  }
 
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.near:
//        getSupportFragmentManager().beginTransaction().
//            replace(R.id.frame_layout, NearFragment.newInstance()).commit();
 
        if(nearFragment==null){
          nearFragment= NearFragment.newInstance();
        }
        switchContent(firstFragment, nearFragment, getSupportFragmentManager().beginTransaction());
        firstFragment = nearFragment;
 
        selectStringAndBackgroundColor(0);
        break;
      case R.id.search_cheaper:
        if(cheaperFragment==null){
          cheaperFragment= CheaperFragment.newInstance();
        }
        switchContent(firstFragment, cheaperFragment, getSupportFragmentManager().beginTransaction());
        firstFragment = cheaperFragment;
 
        selectStringAndBackgroundColor(1);
        break;
      case R.id.favor:
        if(favorFragment==null){
          favorFragment= FavorFragment.newInstance();
        }
        switchContent(firstFragment, favorFragment, getSupportFragmentManager().beginTransaction());
        firstFragment = favorFragment;
 
        selectStringAndBackgroundColor(2);
        break;
      case R.id.pocket:
        if(pocketFragmnet==null){
          pocketFragmnet= PocketFragment.newInstance();
        }
        switchContent(firstFragment, pocketFragmnet, getSupportFragmentManager().beginTransaction());
        firstFragment = pocketFragmnet;
 
        selectStringAndBackgroundColor(3);
        break;
      case R.id.more:
        if(moreFragment==null){
          moreFragment= MoreFragment.newInstance();
        }
        switchContent(firstFragment, moreFragment, getSupportFragmentManager().beginTransaction());
        firstFragment = moreFragment;
 
        selectStringAndBackgroundColor(4);
        break;
    }
  }
 
  /**
   * 通过 position 的位置改变文字和 View 的颜色
   * @param position
   */
  private void selectStringAndBackgroundColor(int position){
    int sum = textView.length;
    for (int i = 0; i < sum; i++) {
      if (position == i) {
        textView[i].setTextColor(Color.BLACK);
        views[i].setBackgroundColor(Color.parseColor("#FF6600"));
      } else {
        textView[i].setTextColor(Color.GRAY);
        views[i].setBackgroundColor(Color.parseColor("#f0f0f0"));
      }
    }
  }
 
  /**
   * 判断是否添加了界面,以保存当前状态
   */
  public void switchContent(Fragment from, Fragment to,
               FragmentTransaction transaction) {
 
    if (!to.isAdded()) { // 先判断是否被add过
 
      transaction.hide(from).add(R.id.frame_layout, to)
          .commit(); // 隐藏当前的fragment,add下一个到Activity中
    } else {
      transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
    }
 
  }
 
  
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android fragment实现多个页面切换效果,包括了Android fragment实现多个页面切换效果的使用技巧和注意事项,需要的朋友参考一下 现在的APP首页大部分屏幕的下方显示一行Tab标签选项,点击不同的标签就可以切换到不同的界面。如下图: 我们之前都是用TabHost来实现,但是殊不知,TabHost并非是那么的简单,它的可扩展性非常的差,不能随意地定制Tab项显示

  • 感性认识 界面介绍,viewer Geocoder : 查找位置工具,查找到之后会将镜头对准找到的地址,默认使用bing地图 Home Button :视角返回初始位置. Scene Mode Picker : 选择视角的模式,有三种:3D,2D,哥伦布视图(CV) Base Layer Picker : 图层选择器,选择要显示的地图服务和地形服务. Navigation Help Button

  • 本文向大家介绍vue实现密码显示隐藏切换功能,包括了vue实现密码显示隐藏切换功能的使用技巧和注意事项,需要的朋友参考一下 先给大家分享效果图: 具体实现代码如下所示: html: script: 注:带小眼睛的睁开闭合。 总结 以上所述是小编给大家介绍的vue实现密码显示隐藏切换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 本文向大家介绍js实现简易点击切换显示或隐藏,包括了js实现简易点击切换显示或隐藏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现简易点击切换显示或隐藏的具体代码,供大家参考,具体内容如下 html: css: js: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍jQuery实现的导航条切换可显示隐藏,包括了jQuery实现的导航条切换可显示隐藏的使用技巧和注意事项,需要的朋友参考一下 用jQuery实现一些导航条切换,显示隐藏,主要运用的技术有slideToggle( ),toggeClass( ),toggle( ): 代码如下: 效果图:

  • 本文向大家介绍jQuery隐藏和显示效果实现,包括了jQuery隐藏和显示效果实现的使用技巧和注意事项,需要的朋友参考一下 实例 jQuery hide() 简单的jQuery hide()方法演示。 jQuery hide() 另一个hide()实例。演示如何隐藏文本。 jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示