安卓中为了获取context的方法和区别(getContext,getActivity,this,mainActivity.this等)

本文详细介绍了Android开发中Context的不同应用场景及获取方式,包括MainActivity.this、this、getContext()和getActivity等,并探讨了它们在不同环境下的适用性。

最近在着手做项目的时候,发现在需要context的时候,不同的类或者位置中需要用不同的方法聊火气context对象。在百度谷歌查找资料以及问周围的大神之后,总结了大概如下的内容:

1.MainActivity.this:表示MainActivity对象,一般用在内部类中指示外面的this,如果在内部类直接用this,指示的是内部类本身。因为MainActivity继承Activity,而Activity继承Context,所以它也可以用来提供Activity Contex;

2.this:表示当前对象;一般而言,在哪个类中调用,就是指向该对象。

3.getContext():这个是View类中提供的方法,在继承了View的类中才可以调用,返回的是当前View运行在哪个Activity Context中。

4.getActivity和getcontext其实差不多,一般在fragment中使用的时候,用此方法获取。

4.在定义适配器等工具类的时候,很多时候都是要把从头当做方法参数传进来,在构造方法中定义。

package com.weishitech.qmmfchangkge.fragment.home; import android.content.res.AssetFileDescriptor; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.hfd.common.base.BaseFragment; import com.weishitech.qmmfchangkge.MainActivity; import com.weishitech.qmmfchangkge.R; import com.weishitech.qmmfchangkge.bean.SongBean; import com.weishitech.qmmfchangkge.dialog.CustomBottomDialog; import com.weishitech.qmmfchangkge.fragment.Adapter.SongAdapter; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class DataFragment extends BaseFragment implements SongAdapter.OnButtonClickListener{ private static final String ARG_DATA = "data"; private static final String ARG_POSITION = "position"; private ArrayList<SongBean> songBeanList; private int position; RecyclerView rv; boolean topStart = false;//条目播放器状态 private MediaPlayer mediaTopPlayer;//条目播音 private int page = 0; private int pos; private List<SongBean> songBeans; private List<SongBean> songBeans1; private List<SongBean> songBeans2; private List<SongBean> songBeans3; public static DataFragment newInstance(ArrayList<SongBean> data,int position) { DataFragment fragment = new DataFragment(); Bundle args = new Bundle(); args.putParcelableArrayList(ARG_DATA, data); args.putInt(ARG_POSITION, position); fragment.setArguments(args); return fragment; } @Override protected int setLayout() { return R.layout.data_fragment; } @Override protected void initView() { rv= fvbi(R.id.rv); if (getArguments() != null) { songBeanList = getArguments().getParcelableArrayList(ARG_DATA); position = getArguments().getInt(ARG_POSITION); songBeans = new ArrayList<>(); for (int i = 0; i < MainActivity.songBeans.size(); i++) { if (i > 6){ songBeans.add(MainActivity.songBeans.get(i)); } } songBeans1 = new ArrayList<>(); for (int i = 0; i < MainActivity.songBeans.size(); i++) { if (i > 4){ songBeans1.add(MainActivity.songBeans.get(i)); } } songBeans2 = new ArrayList<>(); for (int i = 0; i < MainActivity.songBeans.size(); i++) { if (i > 9){ songBeans2.add(MainActivity.songBeans.get(i)); } } songBeans3 = new ArrayList<>(); for (int i = 0; i < MainActivity.songBeans.size(); i++) { if (i > 5){ songBeans3.add(MainActivity.songBeans.get(i)); } } if (position == 0) { SongAdapter songAdapter = new SongAdapter(getActivity(), songBeans); rv.setLayoutManager(new LinearLayoutManager(getActivity())); rv.setAdapter(songAdapter); songAdapter.setOnButtonClickListener(this); // 设置监听器 rv.setNestedScrollingEnabled(false); }else if(position == 1){ SongAdapter songAdapter = new SongAdapter(getActivity(), songBeans1); rv.setLayoutManager(new LinearLayoutManager(getActivity())); rv.setAdapter(songAdapter); songAdapter.setOnButtonClickListener(this); // 设置监听器 rv.setNestedScrollingEnabled(false); }else if(position == 2){ SongAdapter songAdapter = new SongAdapter(getActivity(), songBeans2); rv.setLayoutManager(new LinearLayoutManager(getActivity())); rv.setAdapter(songAdapter); songAdapter.setOnButtonClickListener(this); // 设置监听器 rv.setNestedScrollingEnabled(false); }else if(position == 3){ SongAdapter songAdapter = new SongAdapter(getActivity(), songBeans3); rv.setLayoutManager(new LinearLayoutManager(getActivity())); rv.setAdapter(songAdapter); songAdapter.setOnButtonClickListener(this); // 设置监听器 rv.setNestedScrollingEnabled(false); }else { SongAdapter songAdapter = new SongAdapter(getActivity(),songBeanList); rv.setLayoutManager(new LinearLayoutManager(getActivity())); rv.setAdapter(songAdapter); songAdapter.setOnButtonClickListener(this); // 设置监听器 rv.setNestedScrollingEnabled(false); } } mediaTopPlayer = getMediaPlayer(); } @Override protected void initClick() { } @Override protected void initData() { } private MediaPlayer getMediaPlayer(){ // 找到了对应的文件路径,创建MediaPlayer并设置数据源为本地文件 MediaPlayer mediaPlayer = new MediaPlayer(); try { //mediaPlayer.setDataSource(getActivity(), Uri.parse("file:///android_asset/大悲咒.mp3")); if (position == 0) { // 从assets目录获取文件描述符 AssetFileDescriptor afd = getActivity().getAssets().openFd(songBeans.get(pos).getSongFilePath()); Toast.makeText(mContext, ""+pos, Toast.LENGTH_SHORT).show(); // 设置数据源 mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); }else if (position == 1) { // 从assets目录获取文件描述符 AssetFileDescriptor afd = getActivity().getAssets().openFd(songBeans1.get(pos).getSongFilePath()); // 设置数据源 mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); } else if (position == 2) { // 从assets目录获取文件描述符 AssetFileDescriptor afd = getActivity().getAssets().openFd(songBeans2.get(pos).getSongFilePath()); // 设置数据源 mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); } else if (position == 3) { // 从assets目录获取文件描述符 AssetFileDescriptor afd = getActivity().getAssets().openFd(songBeans3.get(pos).getSongFilePath()); // 设置数据源 mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); }else { // 从assets目录获取文件描述符 AssetFileDescriptor afd = getActivity().getAssets().openFd(MainActivity.songBeans.get(pos).getSongFilePath()); // 设置数据源 mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); mediaPlayer.prepare(); } return mediaPlayer; } catch (IOException e) { Log.e("MusicMetadataHelper", "Failed to get MP3 file", e); // 如果发生异常,返回 null return null; } } @Override public void onButtonClick(int position, ImageView iv_bf,ImageView iv_gd) { pos = position; if(topStart){ iv_bf.setImageResource(R.mipmap.img_home_stop); topStart = false; mediaTopPlayer.pause(); }else{ iv_bf.setImageResource(R.mipmap.img_home_start); topStart = true; mediaTopPlayer.start(); } iv_gd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CustomBottomDialog dialog = new CustomBottomDialog(getActivity()); dialog.setTitle("自定义上拉弹框"); dialog.setOnConfirmClickListener(new CustomBottomDialog.OnConfirmClickListener() { @Override public void onConfirmClick() { Toast.makeText(getActivity(), "确认点击", Toast.LENGTH_SHORT).show(); } }); dialog.setOnCancelClickListener(new CustomBottomDialog.OnCancelClickListener() { @Override public void onCancelClick() { Toast.makeText(getActivity(), "取消点击", Toast.LENGTH_SHORT).show(); } }); dialog.show(); } }); } @Override public void onDestroy() { super.onDestroy(); if (mediaTopPlayer != null && mediaTopPlayer.isPlaying()) { mediaTopPlayer.stop(); } if (mediaTopPlayer != null) { mediaTopPlayer.release(); } } } package com.weishitech.qmmfchangkge.fragment.Adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.weishitech.qmmfchangkge.R; import com.weishitech.qmmfchangkge.bean.SongBean; import java.util.List; public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> { private List<SongBean> songBeanList; private Context context; // 定义回调接口 public interface OnButtonClickListener { void onButtonClick(int position,ImageView iv_bf,ImageView iv_gd); } private OnButtonClickListener listener; public void setOnButtonClickListener(OnButtonClickListener listener) { this.listener = listener; } public SongAdapter(Context context,List<SongBean> songBeanList) { this.context = context; this.songBeanList = songBeanList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_home, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { SongBean songBean = songBeanList.get(position); holder.tv_sing_name.setText(songBean.getSingName()); holder.tv_song_name.setText(songBean.getSongName()); // 为按钮设置点击监听器 holder.iv_bf.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { // 调用回调方法 listener.onButtonClick(position,holder.iv_bf,holder.iv_gd); } } }); if(songBean.getIcon() == 1){ holder.iv_icon.setImageResource(R.mipmap.song1); }else if(songBean.getIcon() == 2){ holder.iv_icon.setImageResource(R.mipmap.song2); }else if(songBean.getIcon() == 3){ holder.iv_icon.setImageResource(R.mipmap.song3); }else if(songBean.getIcon() == 4){ holder.iv_icon.setImageResource(R.mipmap.song4); }else if(songBean.getIcon() == 5){ holder.iv_icon.setImageResource(R.mipmap.song5); }else if(songBean.getIcon() == 6){ holder.iv_icon.setImageResource(R.mipmap.song6); }else if(songBean.getIcon() == 7){ holder.iv_icon.setImageResource(R.mipmap.song7); }else if(songBean.getIcon() == 8){ holder.iv_icon.setImageResource(R.mipmap.song8); }else if(songBean.getIcon() == 9){ holder.iv_icon.setImageResource(R.mipmap.song9); }else if(songBean.getIcon() == 10){ holder.iv_icon.setImageResource(R.mipmap.song10); }else { holder.iv_icon.setImageResource(R.mipmap.song11); } } @Override public int getItemCount() { return songBeanList.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView tv_song_name,tv_sing_name; ImageView iv_icon,iv_bf,iv_gd; public ViewHolder(View view) { super(view); tv_song_name = view.findViewById(R.id.tv_song_name); tv_sing_name = view.findViewById(R.id.tv_sing_name); iv_icon = view.findViewById(R.id.iv_icon); iv_bf = view.findViewById(R.id.iv_bf); iv_gd = view.findViewById(R.id.iv_gd); } } } 接口回调点击iv_bf播放音乐 AssetFileDescriptor afd = getActivity().getAssets().openFd(songBeans.get(pos).getSongFilePath());我在这穿入pos但是播放的是同一首歌
最新发布
11-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值