13 KiB
13 KiB
代码片段
目录
Activity代码片段
基本Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Activity跳转
// 显式Intent跳转
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
// 带参数跳转
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("key", "value");
startActivity(intent);
// 带返回值的跳转
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
// 接收返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
}
}
Activity生命周期
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化
}
@Override
protected void onStart() {
super.onStart();
// Activity可见
}
@Override
protected void onResume() {
super.onResume();
// Activity可交互
}
@Override
protected void onPause() {
super.onPause();
// Activity失去焦点
}
@Override
protected void onStop() {
super.onStop();
// Activity不可见
}
@Override
protected void onDestroy() {
super.onDestroy();
// Activity销毁
}
Fragment代码片段
基本Fragment
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_my, container, false);
}
}
Fragment事务
// 添加Fragment
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.container, new MyFragment());
transaction.commit();
// 替换Fragment
transaction.replace(R.id.container, new MyFragment());
// 移除Fragment
transaction.remove(fragment);
// 添加到回退栈
transaction.addToBackStack(null);
Fragment与Activity通信
// Fragment发送数据到Activity
public interface OnFragmentInteractionListener {
void onFragmentAction(String data);
}
// Activity实现接口
public class MainActivity extends AppCompatActivity
implements MyFragment.OnFragmentInteractionListener {
@Override
public void onFragmentAction(String data) {
// 处理数据
}
}
网络请求代码片段
Retrofit基本使用
// 定义API接口
public interface ApiService {
@GET("user/{id}")
Call<User> getUser(@Path("id") int id);
@POST("user")
Call<User> createUser(@Body User user);
}
// 创建Retrofit实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
// 创建API服务
ApiService apiService = retrofit.create(ApiService.class);
// 发起请求
Call<User> call = apiService.getUser(1);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
User user = response.body();
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// 处理错误
}
});
OkHttp基本使用
// 创建OkHttpClient
OkHttpClient client = new OkHttpClient();
// 创建Request
Request request = new Request.Builder()
.url("https://api.example.com/user/1")
.build();
// 执行请求
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 处理错误
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String body = response.body().string();
}
}
});
使用协程的网络请求
// 定义suspend函数
suspend fun loadUser(id: Int): User {
return withContext(Dispatchers.IO) {
apiService.getUser(id)
}
}
// 在Activity中使用
lifecycleScope.launch {
try {
val user = loadUser(1)
// 更新UI
} catch (e: Exception) {
// 处理错误
}
}
数据存储代码片段
SharedPreferences
// 写入数据
SharedPreferences prefs = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "value");
editor.putInt("count", 10);
editor.apply();
// 读取数据
String value = prefs.getString("key", "default");
int count = prefs.getInt("count", 0);
Room数据库
// Entity
@Entity(tableName = "user")
public class User {
@PrimaryKey(autoGenerate = true)
private int id;
private String name;
// getters and setters
}
// DAO
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAllUsers();
@Insert
void insertUser(User user);
@Update
void updateUser(User user);
@Delete
void deleteUser(User user);
}
// Database
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
// 使用
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "database")
.build();
UserDao userDao = db.userDao();
文件存储
// 写入文件
String filename = "myfile.txt";
String content = "Hello World";
try (FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE)) {
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
// 读取文件
try (FileInputStream fis = openFileInput(filename)) {
byte[] buffer = new byte[1024];
int length = fis.read(buffer);
String content = new String(buffer, 0, length);
} catch (IOException e) {
e.printStackTrace();
}
UI组件代码片段
RecyclerView
// Adapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<String> data;
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
}
// 使用
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new MyAdapter(data));
Dialog
// AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("标题")
.setMessage("消息")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 确定操作
}
})
.setNegativeButton("取消", null)
.show();
// 自定义Dialog
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog_custom);
dialog.show();
Toast
// 基本Toast
Toast.makeText(this, "消息", Toast.LENGTH_SHORT).show();
// 自定义位置
Toast toast = Toast.makeText(this, "消息", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
工具类代码片段
工具类示例
public class Utils {
// 显示Toast
public static void showToast(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
// 检查网络连接
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
// 获取屏幕宽度
public static int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
return metrics.widthPixels;
}
// 格式化日期
public static String formatDate(long timestamp) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return sdf.format(new Date(timestamp));
}
}
权限请求
// 检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// 请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
REQUEST_CODE);
}
// 处理权限结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已授予
} else {
// 权限被拒绝
}
}
}
图片加载
// 使用Glide
Glide.with(context)
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.into(imageView);
// 使用Picasso
Picasso.get()
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.into(imageView);
代码片段分类
按功能分类
// 1. Activity相关
// - Activity创建
// - Activity跳转
// - Activity生命周期
// - Activity结果返回
// 2. Fragment相关
// - Fragment创建
// - Fragment事务
// - Fragment通信
// 3. 网络相关
// - Retrofit使用
// - OkHttp使用
// - 协程网络请求
// 4. 数据存储相关
// - SharedPreferences
// - Room数据库
// - 文件存储
// 5. UI相关
// - RecyclerView
// - Dialog
// - Toast
// - 自定义View
// 6. 工具类
// - 权限请求
// - 图片加载
// - 工具方法
按复杂度分类
// 1. 基础代码片段
// - 简单的常用操作
// - 适合初学者
// 2. 中级代码片段
// - 需要一定理解
// - 包含最佳实践
// 3. 高级代码片段
// - 复杂实现
// - 性能优化
// - 架构设计
代码片段使用
如何使用代码片段
// 1. 复制代码片段
// 2. 粘贴到项目中
// 3. 根据项目需求修改
// 4. 测试代码
// 5. 集成到项目
注意事项
// 1. 检查依赖
// - 确保添加了必要的依赖库
// - 检查版本兼容性
// 2. 修改包名
// - 将示例包名改为项目包名
// - 检查导入语句
// 3. 适配项目
// - 根据项目架构调整代码
// - 遵循项目代码规范
// 4. 测试验证
// - 运行测试确保代码正确
// - 检查是否有错误或警告
代码片段模板
// Activity模板
public class [ActivityName] extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.[layout_name]);
initViews();
initData();
}
private void initViews() {
// 初始化View
}
private void initData() {
// 初始化数据
}
}
// Fragment模板
public class [FragmentName] extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.[layout_name], container, false);
initViews(view);
return view;
}
private void initViews(View view) {
// 初始化View
}
}
常用代码片段速查
快速查找
// Activity跳转 → 查看"Activity代码片段"
// Fragment使用 → 查看"Fragment代码片段"
// 网络请求 → 查看"网络请求代码片段"
// 数据存储 → 查看"数据存储代码片段"
// UI组件 → 查看"UI组件代码片段"
// 工具方法 → 查看"工具类代码片段"
总结
代码片段是快速开发的利器。合理使用代码片段可以提高开发效率,但要注意根据项目需求进行适配和优化。
最后更新:2024年