安卓ListView行详细内容展示页编写和下拉刷新实现

时间:2021-06-14 14:31:02

ListView行详细内容展示页:

使用轻量级的Fragment实现Listview行内容简单的详细信息展示:

值得注意的是:

1、 主布局(打开它的Activity)必须是FrameLayout布局(帧布局,上下叠加)

2、如果主布局的按钮不能被覆盖,则可在按钮属性加入:android:stateListAnimator="@null"

3、防止穿透点击可在Fragment类中找到视图后添加:view对象.setClickable(true);

4、如果使用的是import android.support.v4.app.Fragment;包时则操作使用getSupportFragmentManager,否则如果使用的是import android.app.Fragment;包时则操作使用getFragmentManager

安卓ListView行详细内容展示页编写和下拉刷新实现

Fragment类的布局编写:

 <FrameLayout xmlns: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="com.example.httptest.ImgFragment"> <ImageView
android:layout_width="match_parent"
android:background="@color/colorBlack"
android:alpha="0.9"
android:layout_height="match_parent" /> <ImageView
android:layout_width="match_parent"
android:src="@mipmap/zcy4"
android:layout_gravity="center"
android:id="@+id/ff_img"
android:layout_height="match_parent" />
<TextView
android:layout_width="wrap_content"
android:text="图片展示页:" android:textSize="18dp"
android:layout_height="wrap_content" /> <TextView
android:layout_width="wrap_content"
android:layout_marginTop="20dp"
android:text="默认内容"
android:id="@+id/ff_title"
android:textColor="@color/colorRed"
android:layout_gravity="center|top"
android:layout_height="wrap_content" />
</FrameLayout>

Fragment类逻辑编写:

 import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView; /**
* A simple {@link Fragment} subclass.
*/
public class ImgFragment extends Fragment {
private ImageView imgview;
private TextView tv;
private int imgres;
private String text; //构造方法,传递内容和图片id参数
public ImgFragment(int imgres,String text) {
this.imgres=imgres;
this.text=text;
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View ffview=inflater.inflate(R.layout.fragment_img, container, false); //设置不能穿透点击
ffview.setClickable(true); imgview=(ImageView)ffview.findViewById(R.id.ff_img);
tv=(TextView)ffview.findViewById(R.id.ff_title); //显示
tv.setText(text);
imgview.setImageResource(imgres); return ffview;
} }

Activity的ListView监听事件里的部分代码:

基于上一篇的SimpleAdapter的事件监听

 //得到内容
String cont=mMap.get("context").toString(); //得到图片资源
int img=(int)mMap.get("img"); //可自接通过此处改变控件上的某个图片显示
//图片显示控件,main_img=(ImageView)findViewById(R.id.main_img);
main_img.setImageResource(img); //开始Fragment
getSupportFragmentManager().beginTransaction()
.addToBackStack("xx1")
//参数1为主布局id,参数2中构造方法要传入图像资源和展示内容
.replace(R.id.main_view,new ImgFragment(img,cont))
.commit();
callbool=true;

Activity的返回和退出:

 //物理返回键
//callbool标志位是为了先销毁Fragment,所以每次打开Fragment是都要设置callbool=true;
public void onBackPressed() {
// super.onBackPressed();关闭原有功能
if(callbool){
//将Fragment退栈
getSupportFragmentManager().popBackStack();callbool=false;
}
else {
//关闭程序
//MainActivity.this.finish();
System.exit(0);
}
}

Listview下拉刷新实现:

基于上一篇的BaseAdapt视图及数据实现

界面内容改变,套入SwipeRefreshLayout:

 <android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:id="@+id/main_ref"
android:layout_marginTop="200dp"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:id="@+id/main_list"
android:layout_height="match_parent">
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>

必须设置此处:

设置为一个全局对象,不能每次数据获取都去建立新对象,否则需要每次初始化适配器类。

private  List<BaseData> listdatax=new ArrayList<>();

刷新控件监听:

 main_ref=(SwipeRefreshLayout)findViewById(R.id.main_ref);
//main_ref.setBackgroundResource(R.mipmap.zcy4);//listview的背景
main_ref.setProgressBackgroundColorSchemeColor(Color.RED);//刷新控件的背景 main_ref.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {//刷新监听
@Override
public void onRefresh() {
//清除list中存在的所有数据
if(listdatax.size()>0) listdatax.clear();
//已经省略重新获取数据
//.............
//在获取数据后重新调用适配器设置数据显示
main_list.setAdapter(myadapterx);
//在适配器类中设置数据完毕时,关闭动画
main_ref.setRefreshing(false);//关闭刷新动画 }
});