Android学习之简易版的新闻应用

 

•准备工作

  新建一个项目,命名为 FragmentBestProject,并选择 Empty Activity;

  并将项目的模式结构改为 Project 模式;

•进入主题

  首先,准备好一个新闻实体类,新建类 News;

News.java

public class News {
    private String title;
    private String content;

    public String getTitle() {
        return title;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

  title 表示新闻标题,content 表示新闻内容

  接着新建布局文件 news_content_frag.xml,用于作为新闻内容的布局;

news_content_frag.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/visibility_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="invisible">

        <TextView
            android:id="@+id/news_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="10dp"
            android:textSize="20sp"
            />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/black"/>

        <TextView
            android:id="@+id/news_content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:padding="15dp"
            android:textSize="18sp"
            />

    </LinearLayout>

    <View
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:background="@color/black"
        />

</RelativeLayout>

  新闻的内容部分主要可以分为两个部分:

  • 头部部分显示新闻标题
  • 正文部分显示新闻内容
  • 中间使用一条细线分隔开(利用 View 来实现)
  • 左侧一条竖线区分标题列表(利用 View 来实现)

  下面提供了双页模式和单页模式的布局示意图,双页和单页模式下文会讲,莫着急;

  双页模式示意图:

   单页模式示意图:

  在新建一个 NewsContentFragment 类,继承自 Fragmet;

NewsContentFragment.java

public class NewsContentFragment extends Fragment {

    private View view;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.news_content_frag,container,false);
        return view;
    }

    public void refresh(String newsTitle,String newsContent){
        View visibilityLayout = view.findViewById(R.id.visibility_layout);
        visibilityLayout.setVisibility(View.VISIBLE);

        TextView newsTitleText = view.findViewById(R.id.news_title);
        TextView newsContentText = view.findViewById(R.id.news_content);

        newsTitleText.setText(newsTitle);//刷新新闻的标题
        newsContentText.setText(newsContent);//刷新新闻的内容
    }
}

  首先在  onCreateView() 方法里加载了我们刚刚创建的 news_content_frag 布局;

  接下来又提供了一个 refresh() 方法

  这个方法就是用于将新闻的标题内容显示在界面上;

  这里通过  view.findViewById() 方法分别获取新闻的标题内容控件,并通过  setText() 将传递的参数设置上;

  到目前为止,我们就把新闻内容的碎片和布局都创建好了;

  但上述布局都是在双页模式中使用的,如果想在单页模式中启动的话,我们还需要在创建一个活动;

  新建一个 Empty Activity,命名为 NewsContentActivity,并将布局名指定为 news_content;

  修改 news_content.xml 中的代码

news_content.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/news_content_fragment"
        android:name="com.example.fragmentbestproject.NewsContentFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

  此处代码充分发挥了代码的复用性,直接在布局中通过  android:name 属性引入 NewsContentFragment;

  这样也就相当于把 news_content_frag 布局的内容自动添加进来;

  接下来修改 NewsContentActivity.java 中的代码

NewsContentActivity.java

public class NewsContentActivity extends AppCompatActivity {

    public static void actionStart(Context context, String newsTitle,String newsContent){
        Intent intent = new Intent(context,NewsContentActivity.class);
        intent.putExtra("news_title",newsTitle);
        intent.putExtra("news_content",newsContent);
        context.startActivity(intent);
    }

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

        //获取传入的新闻标题
        String newsTitle = getIntent().getStringExtra("news_title");
        //获取传入的新闻内容
        String newsContent = getIntent().getStringExtra("news_content");

        //获取news_content中的fragment
        NewsContentFragment newsContentFrgment =
                (NewsContentFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.news_content_fragment);

        newsContentFrgment.refresh(newsTitle,newsContent);//刷新NewsContentFragment界面
    }
}

  可以看到,在  onCreate() 方法中,我们通过 Intent 获取到了传入的新闻标题内容

  然后调用 FragmentManager 的  findFragmentById() 方法得到了 NewsContentFragment 实例;

  接着调用它的  refresh() 方法,并将新闻的标题内容传入,就可以把这些数据显示出来了;

  这里我们还提供了一个  actionStart() 方法,有关该方法的使用,可以参考我的这篇博客

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...