(一)BaseAdapter的三种表达式:

①逗比式

  1. public View getView(int position, View convertView, ViewGroup parent) {
  2. //逗比式
  3. View view=minflater.inflate(R.layout.item,null);
  4. ImageView imageView=(ImageView) view.findViewById(R.id.iv_image);
  5. TextView title=(TextView) view.findViewById(R.id.tv_title);
  6. TextView content=(TextView) view.findViewById(R.id.tv_content);
  7. ItemBean bean=mlist.get(position);
  8. imageView.setImageResource(bean.imageid);
  9. title.setText(bean.title);
  10. content.setText(bean.content);
  11. return view;
  12. }

每进行一次getView就要利用inflater对象去创建一个新的view,并在View中找到相应的控件并给他设置相应的值,这样完全没有利用到ListView的缓存机制,因此称为“逗比式”。

②普通式

既然“逗比式”没有利用到缓存机制,那么我们的普通式就要好好利用。

如何利用?我们需要判断一下convertview是否已经缓存过,如果没有缓存过就创建一个view。如下面的代码:

  1. //普通式
  2. if(convertView==null)
  3. {
  4. convertView=minflater.inflate(R.layout.item,null);
  5. }
  6. ImageView imageView=(ImageView) convertView.findViewById(R.id.iv_image);
  7. TextView title=(TextView) convertView.findViewById(R.id.tv_title);
  8. TextView content=(TextView) convertView.findViewById(R.id.tv_content);
  9. ItemBean bean=mlist.get(position);
  10. imageView.setImageResource(bean.imageid);
  11. title.setText(bean.title);
  12. content.setText(bean.content);
  13. return convertView;
  14. }

他虽然对缓存资源进行了合理的利用,但是还是存在一些问题,不够优化,每次都要去布局中需找部件,findviewbyid是很耗费时间的,这样在小程序中可能体现不出什么,但是总归是耗费时间的,因此我们要对其进行优化。

③文艺式:

在文艺式中我们需要为findviewbyid进行优化,

  1. //文艺式
  2. /*利用ViewHolder优化BaseAdapter思路:
  3. 1.创建Bean对象,用于封装数据
  4. 2.在构造方法中初始化用于映射的数据List
  5. 3.创建ViewHolder类,创建布局映射关系
  6. 4.判断convertView,为空则创建,并设置tag;否则通过tag来取出viewholder
  7. 5.给viewholder中的空间设置数据*/
  8. ViewHolder viewHolder;
  9. if(convertView==null){
  10. convertView=minflater.inflate(R.layout.item,null);
  11. viewHolder=new ViewHolder();
  12. viewHolder.imageView=(ImageView)convertView.findViewById(R.id.iv_image);
  13. viewHolder.title=(TextView)convertView.findViewById(R.id.tv_title);
  14. viewHolder.content=(TextView)convertView.findViewById(R.id.tv_content);
  15. convertView.setTag(viewHolder);
  16. }else{
  17. viewHolder=(ViewHolder) convertView.getTag();
  18. }
  19. ItemBean bean=mlist.get(position);
  20. viewHolder.imageView.setImageResource(bean.imageid);
  21. viewHolder.title.setText(bean.title);
  22. viewHolder.content.setText(bean.content);
  23. return convertView;
  24. }
  25. class ViewHolder{
  26. public ImageView imageView;
  27. public TextView title;
  28. public TextView content;
  29. }

(二)startActivityForResult的应用

startActivityForResult startActivityForResult(Intent intent, int requestCode)。这个方法我一般用来在ActivityA中启动另个activityB。当返回的时候需要携带来自B的数据。ActivityA更新界面。
1.首先要在activityA中启动startActivityForResult(Intent intent, int requestCode)

  1. btn.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. Intent intent=new Intent(MainActivity.this,HeadActivity.class);
  5. startActivityForResult(intent,0x11);
  6. }
  7. });

参数1.就是一个intent 你可以携带一些数据。当然也可以不携带

参数2.requescode,你自定义的一个int类型的数值(一般>0);

2.还有一个方法。这个方法是在ActivityB中使用的,主要一定要在finish()之前调用该方法,不然不起作用

setResult(int resultCode, Intent data)

  1. gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  2. @Override
  3. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  4. Intent intent=getIntent();
  5. Bundle bundle=new Bundle();
  6. bundle.putInt("imageId",imageId[position]);
  7. intent.putExtras(bundle);
  8. setResult(0x11,intent);
  9. finish();
  10. }
  11. });

同样还是两个参数,

参数1:resultcode,先说作用。这个参数有两个作用。第一个可以用来判断有没有返回成功。还有一个作用同样可以判断是从哪个activity返回来的

 为什么呢。这个参数可以自定义。如果返回成功了,当时你在activityB中定义的什么,那么 在

onActivityResult(int requestCode, int resultCode, Intent data)这个方法中就会接收到什么。所以可以用来判断来这哪个activity。 如果失败了(比如你在ActivityB中直接按了返回键。什么都没有操作),这种情况在ActivityA中接收到的requestcode 就是0. 所以这个参数我一般用来判断是否返回成功。

3.最后在ActivityA中onActivityResult(int requestCode, int resultCode, Intent data)中接收数据,并判断requestCode和resultCode是不是你想要的,然后进行取值。

 

一个案例:进行头像的切换

 

 点击切换头像,到另一个页面

 

 选好后,就会自动回到上个页面并且头像切换成功

 

 activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:background="@drawable/beijing"
  8. android:paddingTop="40dp"
  9. android:orientation="vertical" >
  10.  
  11. <ImageView
  12. android:id="@+id/t_image"
  13. android:layout_width="100dp"
  14. android:layout_height="100dp"
  15. android:layout_gravity="center_horizontal"
  16. android:src="@drawable/touxiang" />
  17.  
  18. <Button
  19. android:id="@+id/btn"
  20. android:layout_width="wrap_content"
  21. android:layout_height="40dp"
  22. android:layout_gravity="center_horizontal"
  23. android:text="选择头像"
  24. />
  25.  
  26. </LinearLayout>

activity_head.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".HeadActivity">
  8. <GridView
  9. android:id="@+id/gridView"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"
  12. android:layout_marginTop="10dp"
  13. android:horizontalSpacing="3dp"
  14. android:verticalSpacing="3dp"
  15. android:numColumns="4">
  16. </GridView>
  17. </RelativeLayout>

MainActivity.java

  1. package com.example.startactivityforresult;
  2. import androidx.annotation.Nullable;
  3. import androidx.appcompat.app.AppCompatActivity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. import android.widget.Toast;
  10. public class MainActivity extends AppCompatActivity {
  11. ImageView imageView;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. Button btn=(Button)findViewById(R.id.btn);
  17. btn.setOnClickListener(new View.OnClickListener() {
  18. @Override
  19. public void onClick(View v) {
  20. Intent intent=new Intent(MainActivity.this,HeadActivity.class);
  21. startActivityForResult(intent,0x11);
  22. }
  23. });
  24. }
  25. @Override
  26. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  27. super.onActivityResult(requestCode, resultCode, data);
  28. if(requestCode==0x11 && resultCode==0x11)
  29. {
  30. Bundle bundle=data.getExtras();
  31. int image=bundle.getInt("imageId");
  32. int k=bundle.getInt("word");
  33. imageView=(ImageView)findViewById(R.id.t_image);
  34. imageView.setImageResource(image);
  35. }
  36. }
  37. }

HeadActivity.java

  1. package com.example.startactivityforresult;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.AdapterView;
  8. import android.widget.BaseAdapter;
  9. import android.widget.GridView;
  10. import android.widget.ImageView;
  11. import android.widget.Toast;
  12. public class HeadActivity extends AppCompatActivity {
  13. public int[] imageId = new int[]{R.drawable.touxiang1, R.drawable.touxiang2,
  14. R.drawable.touxiang3, R.drawable.touxiang4, R.drawable.touxiang5
  15. }; // 定义并初始化保存头像id的数组
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_head);
  20. GridView gridView=(GridView)findViewById(R.id.gridView);
  21. BaseAdapter baseAdapter=new BaseAdapter() {
  22. @Override
  23. public int getCount() {
  24. return imageId.length;
  25. }
  26. @Override
  27. public Object getItem(int position) {
  28. return position;
  29. }
  30. @Override
  31. public long getItemId(int position) {
  32. return position;
  33. }
  34. @Override
  35. public View getView(int position, View convertView, ViewGroup parent) {
  36. ImageView imageView;
  37. if(convertView==null){
  38. imageView=new ImageView(HeadActivity.this);
  39. imageView.setAdjustViewBounds(true);
  40. imageView.setMaxHeight(158);
  41. imageView.setMaxWidth(150);
  42. imageView.setPadding(5, 5, 5, 5);
  43. }else{
  44. imageView=(ImageView)convertView;
  45. }
  46. imageView.setImageResource(imageId[position]);
  47. return imageView;
  48. }
  49. };
  50. gridView.setAdapter(baseAdapter);
  51. gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  52. @Override
  53. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  54. Intent intent=getIntent();
  55. Bundle bundle=new Bundle();
  56. bundle.putInt("imageId",imageId[position]);
  57. intent.putExtras(bundle);
  58. setResult(0x11,intent);
  59. finish();
  60. }
  61. });
  62. }
  63. }

 

版权声明:本文为xiaofengzai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiaofengzai/p/12285448.html