一、ListView
先上效果图
1—列表项布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/app_icon_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@mipmap/ic_launcher" />
<TextView
android:id="@+id/app_name_image_view"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="这是标题"
android:gravity="center_vertical"
android:layout_marginLeft="12dp" />
<TextView
android:id="@+id/app_spec_view"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="规格"
android:gravity="center_vertical"
android:layout_marginLeft="15dp" />
</LinearLayout>
2—整体布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btnGet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="读取数据" />
<ListView
android:id="@+id/lvContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp" >
</ListView>
</LinearLayout>
</RelativeLayout>
3—适配器
public class AppListAdapter extends BaseAdapter{
List<componentModel> oAppInfos;
private LayoutInflater layoutInflater;
private Context context;
@Override
public int getCount() {
return oAppInfos.size();
}
@Override
public Object getItem(int i) { //返回当前position位置 的item object
return oAppInfos.get(i);
}
@Override
public long getItemId(int i) { //返回当前position/i位置item的id
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
//处理view与data,进行数据填充
convertView=layoutInflater.inflate(R.layout.listlayout,null );
ImageView appIconView=convertView.findViewById(R.id.app_icon_image );
TextView appNameView=convertView.findViewById(R.id.app_name_image_view );
TextView appSpecView=convertView.findViewById(R.id.app_spec_view );
appNameView.setText(oAppInfos.get(i).name+"["+oAppInfos.get(i).code+"]");
appSpecView.setText(oAppInfos.get(i).spec);
appIconView.setBackgroundResource(R.mipmap.ic_launcher);
return convertView;
}
/**
* 构造函数
* @param data 字符串队列
*/
public AppListAdapter(Context context, List<componentModel> data){
this.context=context;
this.layoutInflater=LayoutInflater.from(context);
this.oAppInfos=data;
}
}
4—调用
private ListView listview;
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_find,container,false );
lvDatas=new ArrayList<>();
listview=(ListView)v.findViewById(R.id.lvContainer);
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//设置监听事件
listview.setOnItemClickListener(lvListener);
listview.setAdapter(new AppListAdapter( getActivity(),lvDatas));
}
//列表项目事件
AdapterView.OnItemClickListener lvListener=new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long Id) {
String summary=lvDatas.get(position).name+" ["+lvDatas.get(position).code+"]";
Toast.makeText(getActivity(), summary, Toast.LENGTH_SHORT).show();
}
};
二、ListView方法2
上效果图
1—列表项布局
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="60dp"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<TextView
android:id="@+id/rv_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="肉"
android:textColor="@color/colorWhite"
android:background="@drawable/bg48"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/rv_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="100dp"
android:paddingTop="20dp"
android:text="好吃的肉"
android:textColor="@color/colorBlack"
android:textSize="20dp"
app:layout_constraintStart_toEndOf="@id/rv_icon" />
</android.support.constraint.ConstraintLayout>
2—整体布局
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyCartActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<!-- 底部控制按钮 -->
<android.support.design.widget.FloatingActionButton
android:id="@+id/float_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@color/colorWhite"
app:backgroundTintMode="src_atop"
android:src="@drawable/main01"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent" >
</android.support.design.widget.FloatingActionButton>
</android.support.constraint.ConstraintLayout>
3—适配器
public class MyListViewAdapter extends BaseAdapter {
private List<Food> mList;
//构造函数
public MyListViewAdapter(){
mList=new ArrayList<Food>();
mList.add(new Food("收藏夹","*","*","#000000"));
}
// 新增记录
public void addNewItem(Food f){
if(mList==null) mList=new ArrayList<Food>();
mList.add(f );
notifyDataSetChanged();
}
public void deleteItem(int pos){
if(mList==null || mList.isEmpty()) return;
mList.remove(pos );
notifyDataSetChanged();
}
public void deleteItemByName(String name){
if(mList==null || mList.isEmpty()) return;
for(Food item :mList){
if(item.getName().equals(name)){
mList.remove(item);
System.out.println("DeleteItem / successful");
break;
}
}
notifyDataSetChanged();
}
@Override
public int getCount() {
if(mList==null) return 0;
return mList.size();
}
@Override
public Object getItem(int i) {
if(mList==null) return null;
return mList.get(i );
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if(convertView==null){
convertView= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.single_recyclerview,null );
viewHolder=new ViewHolder();
viewHolder.mTv=(TextView) convertView.findViewById(R.id.rv_text);
viewHolder.mIcon=(TextView)convertView.findViewById(R.id.rv_icon);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) convertView.getTag();
}
viewHolder.mTv.setText(mList.get(i).getName());
viewHolder.mIcon.setText(mList.get(i).getCategory().subSequence(0,1));
return convertView;
}
private class ViewHolder{
public TextView mTv,mIcon;
}
}
4—调用
private ListView mListView;
private MyListViewAdapter myListViewAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mycart);
mListView=(ListView)findViewById(R.id.listview );
myListViewAdapter=new MyListViewAdapter();
mListView.setAdapter(myListViewAdapter);
}