本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习。
(1)写了三块代码,一个是XML主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_sim" />
</LinearLayout>
(2)第二个是怎么布局的XML代码
<?xml version="1.0" encoding="utf-8"?>
<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/imaged"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="5dp" />
<LinearLayout
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22dp"/>
<TextView
android:id="@+id/tv_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13dp"/>
</LinearLayout>
</LinearLayout>
(3)前两个都很简单,第三个是Java主代码,我没有分开写(纯属懒了)
package com.example.adapter_test;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SimpleAdapter extends AppCompatActivity {
ListView listView;
List<Map<String,Object>> map=new ArrayList<Map<String,Object>>();
int[] img={R.drawable.like, R.drawable.local,
R.drawable.report, R.drawable.share};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_adapter);
//设置菜单栏的名字和左边的返回图标,返回的动作要和manifests配合
ActionBar supportActionBar = getSupportActionBar();
supportActionBar.setTitle("Simple");
supportActionBar.setDisplayHomeAsUpEnabled(true);
//找控件
listView = findViewById(R.id.lv_sim);
//往每一个item中添加内容
Map<String,Object> maps=new HashMap<String,Object>();
//添加30个item,并把每个item加入到整个list中
for(int i=0;i<30;i++){
maps=new HashMap<String,Object>();
maps.put("titlell", "啥子东西"+i);
maps.put("subtitlell","你是真的好啊"+i);
maps.put("imagell", img[i % img.length]);
map.add(maps);
}
//把整个List加入到适配器中,后面两个参数要把里面的元素和布局里面的元素一一对应(重新new)
//String里的名字要和上面maps的一样
//int里的名字要和布局文件里面的一样
listView.setAdapter(new android.widget.SimpleAdapter(this,
map,
R.layout.simple_adapter_2,
new String[]{"imagell","titlell","subtitlell"},
new int[]{R.id.imaged,R.id.tv_title,R.id.tv_subtitle}));
//给每个Item设置点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Map<String, Object> stringObjectMap = map.get(position);
//打印stringObjectMap的所有元素
Toast.makeText(SimpleAdapter.this, "现在是" + position +
stringObjectMap, Toast.LENGTH_SHORT).show();
}
});
}
//创建菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//获取并MenuInflater类(类似媒婆或者适配器的作用来连接)
MenuInflater menuInflater = getMenuInflater();
//让这个menu文件连接上方法参数中的形参
menuInflater.inflate(R.menu.option_menu,menu);
return super.onCreateOptionsMenu(menu);
}
//为菜单设置选择和点击
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
//获取每个菜单图标的id
int itemId = item.getItemId();
Toast.makeText(this,item.getTitle().toString(),Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
}
返回的动作设置
<activity
android:name=".SimpleAdapter"
android:exported="false"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
menu的xml文件设置,图要自己找哦
iconfont-阿里巴巴矢量图标库 此网址很不错
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:icon="@drawable/share"
android:id="@+id/menu_share"
android:title="分享"
app:showAsAction="ifRoom"/>
<item
android:icon="@drawable/like"
android:id="@+id/menu_like"
android:title="喜欢"
app:showAsAction="ifRoom" />
<item
android:icon="@drawable/report"
android:id="@+id/menu_report"
android:title="举报"
app:showAsAction="ifRoom" />
<item
android:icon="@drawable/local"
android:id="@+id/menu_local"
android:title="位置"
app:showAsAction="ifRoom" />
</menu>
最后效果图,因为还设置了一下颜色和主题,所以有点不一样