Android--完成新聞界面(單屏幕+雙屏)


流程圖

 

(1)新建一個項目

(2)添加依賴庫

(3)准備News

(4)新建新聞內容布局

(5)新建展示新聞內容的碎片

(6)新建活動布局文件引入之前的碎片布局

(7)修改活動代碼

(8)創建用於顯示新聞題目列表文件

(9)創建RecycleView布局和其子布局

(10)新建單頁和雙頁布局

(11)新建內部類用作RecycleView適配器

(12)RecycView中填充數據

 

 

 

2News布局

 

 

編寫News的布局文件News_content_layout.xml

 

3)編寫News

 

public class News {
    private String headline;
    private String content_top;
    private String content_buttom;
    private int src;
    public String getHeadline(){
        return headline;
    }
    public String getContent_top(){
        return content_top;
    }
    public String getContent_buttom(){
        return content_buttom;
    }
    public int getSrc(){return src;}
    public void setHeadline(String headline){
        this.headline = headline;
    }
    public void setContent_buttom(String content_buttom){
        this.content_buttom = content_buttom;
    }
    public void setContent_top(String content_top){
        this.content_top = content_top;
    }
    public void setSrc(int src){this.src = src;}
}

主要包括News標題和內容以及圖片獲取與設置

 

4)創建使用News_content_layout.xml布局的碎片類NewsContentFragment

 

public class NewsContentFragment extends Fragment{
    private View view;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.news_content_layout,container,false);
        return view;
    }
    public void refrech(String News_headline_text,String News_content_top_text,String News_content_bottom_text,int src){
        View news_content_fragment = view.findViewById(R.id.invistiable_view);
        news_content_fragment.setVisibility(View.VISIBLE);
        TextView News_headline = (TextView) view.findViewById(R.id.news_headline);
        TextView News_content_top = (TextView) view.findViewById(R.id.news_content_top);
        TextView News_content_buttom = (TextView) view.findViewById(R.id.news_content_bottom);
        ImageView img = (ImageView) view.findViewById(R.id.news_image);
        News_headline.setText(News_headline_text);
        News_content_top.setText(News_content_top_text);
        News_content_buttom.setText(News_content_bottom_text);
        img.setImageResource(src);
    }
}

其中方法的作用是載入News的內容布局,和刷新布局中文本數據以及圖像數據的內容。

 

5)創建新聞索引欄布局

 

使用RecycleView布局創建索引欄布局,

 

並添加子布局文件,以及實現News_item適配器。

 

(2)創建新聞索引碎片類

 

這個類的主要作用是加載新聞索引布局,以及在該類實現一個子項的適配器,將內容顯示。

 

 

 

7)創建一個NewsContentActivity用於展示單屏幕的新聞內容它的布局文件是activity_news_content。通過點擊實踐創建顯示。

 

public class NewsContentActivity extends AppCompatActivity {

    public static void actionStart(Context context,String Headline,String newsContest_top,String newsContest_buttom,int src){
        Intent intent = new Intent(context,NewsContentActivity.class);
        intent.putExtra("news_headline",Headline);
        intent.putExtra("news_Context_top",newsContest_top);
        intent.putExtra("news_Context_buttom",newsContest_buttom);
        intent.putExtra("src",src+"");
        context.startActivity(intent);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news_content);
        String news_headline = getIntent().getStringExtra("news_headline");
        String news_Context_top = getIntent().getStringExtra("news_Context_top");
        String news_Context_buttom = getIntent().getStringExtra("news_Context_buttom");
        String str = getIntent().getStringExtra("src");
        int src=Integer.parseInt(str);
        NewsContentFragment newsContentFragment= (NewsContentFragment) getSupportFragmentManager().findFragmentById(R.id.content_activity_fragment);
        newsContentFragment.refrech(news_headline,news_Context_top,news_Context_buttom,src);
    }


}

所以應該在點擊單頁的目錄子項的時候,在創建新的Activity之前實現數據傳輸。

通過getIntent().getStringExtra()方法獲得數據,使用getSupportFragmentManager().findFragmentById()方法獲得要使用的fragment,並調用刷新函數載入數據。

 

(8) 創建在res下創建layout-land文件夾並創建雙頁的main_activtiy.xml文件

 

 

 

可以使用LinearLayout把兩個碎片嵌入到main_activity.xml文件。因為要替換右邊的部分,所以需要用FrameLayout來裝右邊的fragment

<FrameLayout
    android:id="@+id/news_content_fragment_framelayout"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3"
   >

    <fragment
        android:id="@+id/news_content_fragment_main"
        android:name="com.example.administrator.fragmentbestp.NewsContentFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></fragment>
</FrameLayout>

同理也可以編寫單頁的main_activtity.xml文件

 

 

 

8)新聞內容展示方式有fragmentActivity兩種方式,通過Mainactivity中是否有用來裝新聞內容的FrameLayout來判斷並且用isTwoPane來記錄。

 

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (getActivity().findViewById(R.id.news_content_fragment_framelayout)!=null){
        isTwoPane =true;
    }else {
        isTwoPane = false;
    }
}

 

 

 

9)新聞內容展示主要由新聞索引中是否點擊決定

 

所以在NewsTitleFragment類中編寫的適配器中,對子項目添加監聽器,如果被點擊則創建活動/展示碎片。

 

public NewsTitleApater.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_title_item,parent,false);
    final ViewHolder holder = new ViewHolder(view);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            News news = mNewslist.get(holder.getAdapterPosition());
            if (isTwoPane) {
                NewsContentFragment newsContentFragment = (NewsContentFragment) getFragmentManager().findFragmentById(R.id.news_content_fragment_main);
                newsContentFragment.refrech(news.getHeadline(),news.getContent_top(),news.getContent_buttom(),news.getSrc());
            }else{
                NewsContentActivity.actionStart(getActivity(),news.getHeadline(),news.getContent_top(),news.getContent_buttom(),news.getSrc());
            }
        }
    });
    return holder;
}

 

(10)最后將News信息存到News鏈表里,並填充數據。

 

public void init_news(){
    News news;
    for(int i=1;i<6;i++){
        news = new News();
        news.setHeadline("This is news title"+i);
        news.setContent_buttom(getRandomLContent("This is news title"+i));
        news.setContent_top("這是圖片"+i);
        news.setSrc(imgs[i]);
        newslist.add(news);
    }
}
private String getRandomLContent(String input){
    Random r = new Random();
    int l =r.nextInt(10)+1;
    StringBuilder builder = new StringBuilder();
    for(int i=0;i<l;i++){
        builder.append(input);
    }
    return builder.toString();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM