RecyclerView是Android中对ListView的升级,用来在有限的手机屏幕上展示大量的数据。我们还可以为每个item,甚至每个item内的子控件设置监听器,以实现点击事件。
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(mContext, NewsActivity.class); mContext.startActivity(intent); } });
package com.example.mywechat;
import org.junit.Test;
import static org.junit.Assert.*;
/**
- Example local unit test, which will execute on the development machine (host).
- @see Testing documentation */ public class ExampleUnitTest { @Test public void addition_isCorrect() { assertEquals(4, 2 + 2); } }
package com.example.mywechat;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView;
import androidx.annotation.Nullable; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
/**
-
A simple {@link Fragment} subclass. */ public class weixinFragment extends Fragment { private final static String PRODUCT="product"; private final static String PRICE="price"; private final static String CONFIGURATION="configuration";
public weixinFragment() { // Required empty public constructor }
private View view;//定义view用来设置fragment的layout public RecyclerView mCollectRecyclerView;//定义RecyclerView List<Map<String,Object>> items=new ArrayList<Map<String,Object>>();
//自定义recyclerveiw的适配器 MyRecyclerAdapter myRecyclerAdapter;
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取fragment的layout view = inflater.inflate(R.layout.tab01, container, false); //对recycleview进行配置 initRecyclerView(); //模拟数据 initData(); return view; }
/**
-
TODO 模拟数据 */ private void initData() { String[] products={"小米Note","华为荣耀7","魅族MX5","锤子T1"}; String[] prices={"1999","1999","1999","2480"}; String[] configurations={"高通骁龙 801,3GB RAM,16GB ROM","麒麟 935,3GB RAM,16GB ROM","联发科(MTK)Helio X10 Turbo,3GB RAM,32GB ROM","高通骁龙 801,2GB RAM,32GB ROM"};
for(int i=0;i<products.length;i++) { Map<String,Object> item=new HashMap<String,Object>(); item.put(PRODUCT, products[i]); item.put(PRICE, prices[i]); item.put(CONFIGURATION, configurations[i]); items.add(item); } }
/**
- TODO 对recycleview进行配置 */
private void initRecyclerView() { //获取RecyclerView mCollectRecyclerView=(RecyclerView)view.findViewById(R.id.rv_list); //创建adapter myRecyclerAdapter = new MyRecyclerAdapter(getActivity(), items); //给RecyclerView设置adapter mCollectRecyclerView.setAdapter(myRecyclerAdapter); //设置layoutManager,可以设置显示效果,是线性布局、grid布局,还是瀑布流布局 //参数是:上下文、列表方向(横向还是纵向)、是否倒叙 mCollectRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); //设置item的分割线 mCollectRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //RecyclerView中没有item的监听事件,需要自己在适配器中写一个监听事件的接口。参数根据自定义
}
-
}
package com.example.mywechat;
import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;
import android.app.Fragment;
/**
-
A simple {@link Fragment} subclass. */ public class settingsFragment extends Fragment {
public settingsFragment() { // Required empty public constructor }
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.tab04, container, false); }
}
package com.example.mywechat;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class NewsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_acitivity);
}
}
package com.example.mywechat;
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView;
import java.util.List; import java.util.Map;
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
private final static String PRODUCT="product";
private final static String PRICE="price";
private final static String CONFIGURATION="configuration";
private List<Map<String,Object>> items;
private Context mContext;
public MyRecyclerAdapter(Activity context, List<Map<String,Object>> items){
this. mContext=context;
this. items=items;
}
@Override
public int getItemCount() {
return items.size();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
MyViewHolder myViewHolder=new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item,parent,false));
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Map<String,Object> item=items.get(position);
MyViewHolder myViewHolder=holder;
myViewHolder.tv1.setText((String)item.get(PRODUCT));
myViewHolder.tv2.setText((String)item.get(PRICE));
myViewHolder.tv3.setText((String)item.get(CONFIGURATION));
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(mContext, NewsActivity.class);
mContext.startActivity(intent);
}
});
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv1;
TextView tv2;
TextView tv3;
public MyViewHolder(View view) {
super(view);
tv1=(TextView) view.findViewById(R.id.txtProduct);
tv2=(TextView) view.findViewById(R.id.txtPrice);
tv3=(TextView) view.findViewById(R.id.txtConfiguration);
}
}
}
package com.example.mywechat;
import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;
import android.app.Fragment;
import android.app.FragmentManager; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.ImageButton; import android.widget.LinearLayout;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private LinearLayout mTabWeixin;
private LinearLayout mTabFrd;
private LinearLayout mTabContact;
private LinearLayout mTabSettings;
private ImageButton mImgWeixin;
private ImageButton mImgFrd;
private ImageButton mImgContact;
private ImageButton mImgSettings;
private Fragment mTab01= new weixinFragment();
private Fragment mTab02= new frdFragment();
private Fragment mTab03= new contactFragment();
private Fragment mTab04= new settingsFragment();
private FragmentManager fm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initView();
initFragment();
initevent();
selectfragment(0);
}
private void initFragment(){
fm=getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(R.id.id_content,mTab01);
transaction.add(R.id.id_content,mTab02);
transaction.add(R.id.id_content,mTab03);
transaction.add(R.id.id_content,mTab04);
transaction.commit();
}
private void initView(){
mTabWeixin=(LinearLayout)findViewById(R.id.id_tab_weixin);
mTabFrd=(LinearLayout)findViewById(R.id.id_tab_frd);
mTabContact=(LinearLayout)findViewById(R.id.id_tab_contact);
mTabSettings=(LinearLayout)findViewById(R.id.id_tab_settings);
mImgWeixin=(ImageButton)findViewById(R.id.id_tab_weixin_img);
mImgFrd=(ImageButton)findViewById(R.id.id_tab_frd_img);
mImgContact=(ImageButton)findViewById(R.id.id_tab_contact_img);
mImgSettings=(ImageButton)findViewById(R.id.id_tab_settings_img);
}
private void initevent(){
mTabWeixin.setOnClickListener(this);
mTabFrd.setOnClickListener(this);
mTabContact.setOnClickListener(this);
mTabSettings.setOnClickListener(this);
}
private void hidefragment(FragmentTransaction transaction){
transaction.hide(mTab01);
transaction.hide(mTab02);
transaction.hide(mTab03);
transaction.hide(mTab04);
}
private void selectfragment(int i){
FragmentTransaction transaction=fm.beginTransaction();
hidefragment(transaction);
switch (i){
case 0:
transaction.show(mTab01);
resetImgs();
mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
transaction.show(mTab02);
mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
transaction.show(mTab03);
mImgContact.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
transaction.show(mTab04);
mImgSettings.setImageResource(R.drawable.tab_settings_pressed);
break;
default:
break;
}
transaction.commit();
}
@Override
public void onClick(View v) {
resetImgs();
switch (v.getId()){
case R.id.id_tab_weixin:
selectfragment(0);
break;
case R.id.id_tab_frd:
selectfragment(1);
break;
case R.id.id_tab_contact:
selectfragment(2);
break;
case R.id.id_tab_settings:
selectfragment(3);
break;
default:
break;
}
}
public void resetImgs(){
mImgWeixin.setImageResource(R.drawable.tab_weixin_normal);
mImgFrd.setImageResource(R.drawable.tab_find_frd_normal);
mImgContact.setImageResource(R.drawable.tab_address_normal);
mImgSettings.setImageResource(R.drawable.tab_settings_normal);
}
}