java Fragment && RecyclerView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Fragment && RecyclerView相关的知识,希望对你有一定的参考价值。

public class RecyclerViewActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);

        // 1. get a reference to recyclerView
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        //Database
        ItemData itemsData[] = {
                new ItemData("HELP", android.R.drawable.ic_menu_help),
                new ItemData("Delete", android.R.drawable.ic_menu_delete),
                new ItemData("Favorite", android.R.drawable.ic_menu_preferences),
                new ItemData("Like", android.R.drawable.ic_menu_call),
                new ItemData("Rating", android.R.drawable.ic_menu_camera),
                new ItemData("HELP", android.R.drawable.ic_menu_help),
                new ItemData("Delete", android.R.drawable.ic_menu_delete),
                new ItemData("Favorite", android.R.drawable.ic_menu_preferences),
                new ItemData("Like", android.R.drawable.ic_menu_call),
                new ItemData("Rating", android.R.drawable.ic_menu_camera)};

        // 2. set layoutManger
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        // 3. create an adapter
        RecyclerViewAdapter mAdapter = new RecyclerViewAdapter(itemsData);
        // 4. set adapter
        recyclerView.setAdapter(mAdapter);
        // 5. set item animator to DefaultAnimator
        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }
}
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    //
    private ItemData[] itemsData;

    //
    public RecyclerViewAdapter(ItemData[] itemsData){
        this.itemsData = itemsData;
    }

    //
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        //
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_item_data, null);

        //
        ViewHolder viewHolder = new ViewHolder(itemLayoutView);

        return viewHolder;
    }

    //
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position){

        //
        viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
        viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
    }

    //
    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView txtViewTitle;
        public ImageView imgViewIcon;

        public ViewHolder(View itemLayoutView){
            super(itemLayoutView);
            itemLayoutView.setOnClickListener(this);
            txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
            imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        }

        @Override
        public void onClick(View view){
            Toast.makeText(view.getContext(), "position = " + getPosition(), Toast.LENGTH_SHORT).show();
        }
    }

    //
    @Override
    public int getItemCount(){
        return itemsData.length;
    }
}
## RecyclerView
[http://hmkcode.com/android-simple-recyclerview-widget-example/]  
  
  ![](https://developer.android.com/training/material/images/RecyclerView.png)
  
  1.an Adapter: extend the RecyclerView.Adapter class  
  2.a LayoutManager: shows the items in a vertical or horizontal scrolling list. To create a custom layout, you extend the RecyclerView.LayoutManager  

  ![](http://hmkcode.com/wp-content/uploads/2014/07/android-recyclerview-item-layout.png)
  
*******  
####XML屬性  
##### clipToPadding  
Listview的一个强大的属性:android:clipToPadding=false,默认android:clipToPadding=true的。  
clipToPadding:  
就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区
域就往里缩,假设 内部有个属性设置了PaddingTop但是滑动的时候就忽视paddingTop   则使用该属性如设置android:clipToPadding=false,如下:  

    <ListView
    android:id="@+id/list"
    android:clipToPadding="false"
    android:paddingTop="50dip"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
如果你使用的是RecyclerView,也是有这个属性的。  
  
  #####Java Classes

  1.MainActivity.java
  2.MyAdapter.java
  3.ItemData.java
  
  #####Layout

  1.activity_main.xml
  2.item_layout.xml

## Fragment
[http://litotom.com/2016/06/02/android-fragment-lifecycle/]
[https://litotom.com/2016/06/27/android-fragment-2/]

![](http://litotom.com/wp-content/uploads/2016/06/A4449-1.png)

##### Fragment的生命週期

每個Fragment擁有自己的生命週期,也就是說,在特定的狀況會自動呼叫特定的方法,供使用者依功能需求覆寫這些方法,加入必要的程式碼。依照Fragment產生與出現的順序會執行的方法描述如下:
產生階段(未出現在畫面上)

    onAttach方法

當Fragment被加到某個Activity畫面中時,會自動呼叫此方法。

    onCreate方法

Fragment被建立時會自動呼叫此方法,可加入初始化元件或資料的程式碼。

    onCreateView方法

將在畫面中第一次顯示Fragment時會自動呼叫此方法,必須回傳Fragment畫面的View元件,設計時,請使用方法中的LayoutInflater物件,在此方法中產生畫面元件並回傳。

    onActivityCreated方法

當加入本Fragment的Activity被建立時,該Activity的onCreate方法執行完成後,會自動執行此方法。執行完此方法後,Fragment才出現在畫面上。
準備階段(出現在畫面上)

    onStart方法

當Fragment出現在畫面中時先執行此方法。

    onResume方法

執行完onStart方法後,再自動執行本方法。完成後即在畫面中與使用者互動。
暫停階段

當使用者按下返回鍵,或是程式中將Fragment自某個Activity中移除時,會自動執行以下方法:

    onPause方法

進入暫停前第一個執行的方法。

    onStop方法

執行完onPause方法後,自動執行本方法。

    onDestroyView方法

此時Fragment已不在畫面中,呼叫此方法。

    onDestroy方法

當Fragment要被清除之前,會執行此方法。

    onDetach方法

與當初被加入的Activity卸載時,會自動執行此方法。
public class ItemData {

    //
    private  String title;
    private int imageUrl;

    //
    public ItemData(String title,int imageUrl){

        this.title = title;
        this.imageUrl = imageUrl;
    }

    //getter
    public String getTitle(){
        return title;
    }

    public Integer getImageUrl(){
        return imageUrl;
    }

    //setter
    public void setTitle(){
        this.title = title;
    }

    public void setImageUrl(){
        this.imageUrl = imageUrl;
    }

}

以上是关于java Fragment && RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章

jmeterInclude Controller控件&Test Fragment的使用

将 <fragment> 标签替换为 FragmentContainerView

Android Fragment 回栈的问题

File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)

web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)模板

Ziggeo 错误 setPreviewTexture 使用 Fragment 失败