1. 程式人生 > >Android例子—Fragment例項講解—新聞(購物)類App列表Fragment的簡單實現

Android例子—Fragment例項講解—新聞(購物)類App列表Fragment的簡單實現

本節引言:

相信大家對點選列表,然後進入詳情這種App並不陌生吧,在購物類App和新聞類App中最為常見: 下面我們簡單來講一下流程邏輯!

1.邏輯流程講解:

剛好公司測試妹子的測試機上裝了楚楚街9塊9的APP,呵呵,直接就照這個來研究吧:

嘿嘿,市面上很多APP都是這種樣子的,而這個可以用我們學到的Fragment來實現: 可能gif動畫看不清,筆者用介面原型工具畫個大概吧:

大概就這樣,中間區域是一個佈局容器,一般是FrameLayout,然後我們將一個Fragment replace 到這個容器中或者add也行,而這個Fragment中有一個listview,當我們點選這個ListView中的一項, 中間容器中的Fragment就會被replace成對應詳細資訊的Fragment所替代,如果我們只是replace的話, 就不會儲存第一個Fragment的狀態,使用者又得從頭開始瀏覽,這肯定是很不方便的,這裡我們可以 通過Fragment棧的addtobackStack和popbackstack來解決這個問題!當replace的同時,我們將被替換 的Fragment新增到stack中,當用戶點選回退按鈕時,呼叫popbackstack彈出棧,具體實現見下述程式碼 示例!

2.程式碼示例:簡單新聞類APP列表和內容切換的實現

執行效果圖

實現程式碼

Step 1:先把兩個Fragment以及Activity的佈局實現了

fg_newlist.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background
="@color/white"android:orientation="horizontal"><ListViewandroid:id="@+id/list_news"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

fg_context.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/txt_content"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:textColor="@color/blue"android:textSize="20sp"/></LinearLayout>

activity_main.xml:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/txt_title"android:layout_width="match_parent"android:layout_height="56dp"android:background="@color/blue"android:textColor="@color/white"android:text="新聞列表"android:textSize="20sp"android:textStyle="bold"android:gravity="center"/><FrameLayoutandroid:id="@+id/fl_content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/txt_title"/></RelativeLayout>

Step 2:實現我們的業務Bean類和自定義BaseAdapter類:

Data.java:

/**
 * Created by Jay on 2015/9/6 0006.
 */publicclassData{privateString new_title;privateString new_content;publicData(){}publicData(String new_title,String new_content){this.new_title = new_title;this.new_content = new_content;}publicString getNew_title(){return new_title;}publicString getNew_content(){return new_content;}publicvoid setNew_title(String new_title){this.new_title = new_title;}publicvoid setNew_content(String new_content){this.new_content = new_content;}}

MyAdapter.java:

/**
 * Created by Jay on 2015/9/6 0006.
 */publicclassMyAdapterextendsBaseAdapter{privateList<Data> mData;privateContext mContext;publicMyAdapter(List<Data> mData,Context mContext){this.mData = mData;this.mContext = mContext;}@Overridepublicint getCount(){return mData.size();}@OverridepublicObject getItem(int position){returnnull;}@Overridepubliclong getItemId(int position){return position;}@OverridepublicView getView(int position,View convertView,ViewGroup parent){ViewHolder viewHolder;if(convertView ==null){
            convertView =LayoutInflater.from(mContext).inflate(R.layout.list_item,parent,false);
            viewHolder =newViewHolder();
            viewHolder.txt_item_title =(TextView) convertView.findViewById(R.id.txt_item_title);
            convertView.setTag(viewHolder);}else{
            viewHolder =(ViewHolder) convertView.getTag();}
        viewHolder.txt_item_title.setText(mData.get(position).getNew_title());return convertView;}privateclassViewHolder{TextView txt_item_title;}}

Step 3:MainActivity的實現

MainActivity.java:

publicclassMainActivityextendsAppCompatActivity{privateTextView txt_title;privateFrameLayout fl_content;privateContext mContext;privateArrayList<Data> datas =null;privateFragmentManager fManager =null;privatelong exitTime =0;@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext =MainActivity.this;
        fManager = getFragmentManager();
        bindViews();

        datas =newArrayList<Data>();for(int i =1; i <=20; i++){Data data =newData("新聞標題"+ i, i +"~新聞內容~~~~~~~~");
            datas.add(data);}NewListFragment nlFragment =newNewListFragment(fManager, datas);FragmentTransaction ft = fManager.beginTransaction();
        ft.replace(R.id.fl_content, nlFragment);
        ft.commit();}privatevoid bindViews(){
        txt_title =(TextView) findViewById(R.id.txt_title);
        fl_content =(FrameLayout) findViewById(R.id.fl_content);}//點選回退鍵的處理:判斷Fragment棧中是否有Fragment//沒,雙擊退出程式,否則像是Toast提示//有,popbackstack彈出棧@Overridepublicvoid onBackPressed(){if(fManager.getBackStackEntryCount()==0){if((System.currentTimeMillis()- exitTime)>2000){Toast.makeText(getApplicationContext(),"再按一次退出程式",Toast.LENGTH_SHORT).show();
                exitTime =System.currentTimeMillis();}else{super.onBackPressed();}}else{
            fManager.popBackStack();
            txt_title.setText("新聞列表");}}}

Step 4:列表Fragment的實現:

NewListFragment.java

package com.jay.fragmentdemo4;import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;/**
 * Created by Jay on 2015/9/6 0006.
 */publicclassNewListFragmentextendsFragmentimplementsAdapterView.OnItemClickListener{privateFragmentManager fManager;privateArrayList<Data> datas;privateListView list_news;publicNewListFragment(FragmentManager fManager,ArrayList<Data> datas){this.
            
           

相關推薦

Android例子Fragment例項講解—新聞(購物)App列表Fragment簡單實現

本節引言: 相信大家對點選列表,然後進入詳情這種App並不陌生吧,在購物類App和新聞類App中最為常見: 下面我們簡單來講一下流程邏輯! 1.邏輯流程講解: 剛好公司測試妹子的測試機上裝了楚楚街9塊9的APP,呵呵,直接就照這個來研究吧: 嘿嘿,市面上很

python3:通過例項講解實現_ORM01

ORM全稱“Object Relational Mapping”,即物件-關係對映,就是把關係資料庫的一行對映為一個物件,也就是一個類對應一個表,這樣,寫程式碼更簡單,不用直接操作SQL語句。 明確下我們的需求: 我們要建立一個類,並把類對映到資料庫的一張表,並校驗資料庫每個欄位的取

Android中如何正確的獲得所有App列表

我們經常會遇到這樣的需求:列出手機中所有能開啟的App。此時我們不需要列出那些無法開啟的app,也就是沒有Activity的。網上有一些方法,都是過濾系統app的方法,將簡訊、電話這些App都過濾掉了,

資料探勘筆記-聚-KMeans-原理與簡單實現

K中心點演算法(K-medoids)提出了新的質點選取方式,而不是簡單像k-means演算法採用均值計演算法。在K中心點演算法中,每次迭代後的質點都是從聚類的樣本點中選取,而選取的標準就是當該樣本點成為新的質點後能提高類簇的聚類質量,使得類簇更緊湊。該演算法使用絕對誤差標準來定義一個類簇的緊湊程度。 如果

Android推送的核心原理:長連線的簡單實現

實際需求 移動端需要實時的獲取伺服器的資料 解決方案 輪詢方式:應用程式開啟定時的輪詢,不停的向伺服器請求資料。 SMS push:傳送二進位制簡訊到移動終端,來達到通知終端的目的。客戶端攔截這類簡訊,然後採取相應的操作 持久連線方式:應用程式與伺服

資料探勘筆記-聚-Canopy-原理與簡單實現

Canopy聚類演算法是一個將物件分組到類的簡單、快速、精確地方法。每個物件用多維特徵空間裡的一個點來表示。這個演算法使用一個快速近似距離度量和兩個距離閾值 T1>T2來處理。基本的演算法是,從一個點集合開始並且隨機刪除一個,建立一個包含這個點的Canopy,並在

Android 基於zxing的二維碼掃描功能的簡單實現及優化

由於專案中需要接入一下簡單的二維碼掃描功能,最終使用 zxing 來實現,把官方例子中的部分程式碼摘除出來做了簡單的封裝,並進行了一些優化。這裡簡單做一個記錄。 掃描二維碼 Android 中關於二維碼掃描的庫有很多,但是歸根到底無外乎下面這幾種

資料探勘筆記-聚-SpectralClustering-原理與簡單實現

譜聚類(Spectral Clustering, SC)是一種基於圖論的聚類方法——將帶權無向圖劃分為兩個或兩個以上的最優子圖,使子圖內部儘量相似,而子圖間距離儘量距離較遠,以達到常見的聚類的目的。其中的最優是指最優目標函式不同,可以是Min Cut、Nomarlized

Android 底部Tab部分View超出父容器邊界的簡單實現

App底部導航欄常常會實現這個一個佈局,中間的比另外四個高,這種效果很多人就會想到使用一個RelativeLayout佈局來實現,其實不用那麼麻煩,這種效果一個clipChildren屬性就能搞定。佈局xml如下:<?xml version="1.0" encoding

Android開發ViewPager和Fragment結合使用實現新聞app( 三 )(基本成型的app

//該類為我們的標題欄的自定義View public class MyLinearLayout extends LinearLayout { public MyLinearLayout(Context context, AttributeSet attrs) { super(cont

Android中的Intent例項講解

Intent 是由動作,資料,分類,元件和擴充套件資訊等組成。 組成 屬性 設定屬性的方法 獲取屬性的方法 動作 Action setAction() getAction()

Android Retrofit 2.0 的詳細 使用攻略(含例項講解

前言 在Andrroid開發中,網路請求十分常用 而在Android網路請求庫中,Retrofit是當下最熱的一個網路請求庫 Github截圖 今天,我將獻上一份非常詳細Retrofit v2.0的使用教程,希望你們會喜歡。 目錄 目錄 1. 簡介

Java JUC之Atomic系列12大例項講解和原理分解

在java6以後我們不但接觸到了Lock相關的鎖,也接觸到了很多更加樂觀的原子修改操作,也就是在修改時我們只需要保證它的那個瞬間是安全的即可,經過相應的包裝後可以再處理物件的併發修改,以及併發中的ABA問題,本文講述Atomic系列的類的實現以及使用方法,其中包含: 基本類

wemall app商城原始碼Android之支付寶通知處理

       wemall-mobile是基於WeMall的Android app商城,只需要在原商城目錄下上傳介面檔案即可完成服務端的配置,客戶端可定製修改。本文分享wemall app商城原始碼Android之處理支付寶各介面通知返回,供技術員參考學習。    

Android中allowBackup屬性的含義和危險性例項講解

https://blog.csdn.net/qq_31387043/article/details/51452782 一、前言 今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,

Android ListView效能優化例項講解

前言:   對於ListView,大家絕對都不會陌生,只要是做過Android開發的人,哪有不用ListView的呢?   只要是用過ListView的人,哪有不關心對它效能優化的呢?   關於如何對ListView進行效能優化,不僅是面試中常常會被問到的(我前段時間面試了

Android APT 例項講解

APT(Annotation Processing Tool) 即註解處理器,是一種註解處理工具,用來在編譯期掃描和處理註解,通過註解來生成 Java 檔案。即以註解作為橋樑,通過預先規定好的程式碼生成規則來自動生成 Java 檔案。此類註解框架的代表有 ButterKnife、Dragger2、EventB

Android UI詳解之Fragment例項詳解

http://blog.csdn.net/eclipsexys/article/details/8708024 上一篇我們講解了Fragment的載入方式,這次我們以一個例項來講解: 佈局: <LinearLayoutxmlns:android="htt

Android開發自動生成的AndroidManifest.xml中的allowBackup屬性的含義和危險性例項講解

一、前言 今天在開發的過程中遇到一個問題,就是關於AndroidManifest.xml中的allowBackup屬性,也算是自己之前對這個屬性的不瞭解,加上IDE的自動生成程式碼,沒太注意這個屬性,但是沒想到這個屬性會直接導致隱私資料的丟失。下面就來看一下這個屬性的影

Android觸控事件(三)-觸控事件使用例項

目錄 概述 本文主要介紹之前提到的AbsTouchEventHandle(自定義觸控事件處理類)及TouchUtils(觸控事件輔助工具類)如何結合一起使用. 使用的目的或者說達到的結果是: 簡單方便地完成介面元素的拖動與縮放 在整個過程