# 代码片段

## 目录
- [Activity代码片段](#activity代码片段)
- [Fragment代码片段](#fragment代码片段)
- [网络请求代码片段](#网络请求代码片段)
- [数据存储代码片段](#数据存储代码片段)
- [UI组件代码片段](#ui组件代码片段)
- [工具类代码片段](#工具类代码片段)
- [代码片段分类](#代码片段分类)
- [代码片段使用](#代码片段使用)

---

## Activity代码片段

### 基本Activity

```java
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
```

### Activity跳转

```java
// 显式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生命周期

```java
@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

```java
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事务

```java
// 添加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通信

```java
// 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基本使用

```java
// 定义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基本使用

```java
// 创建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();
        }
    }
});
```

### 使用协程的网络请求

```kotlin
// 定义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

```java
// 写入数据
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数据库

```java
// 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();
```

### 文件存储

```java
// 写入文件
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

```java
// 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

```java
// 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

```java
// 基本Toast
Toast.makeText(this, "消息", Toast.LENGTH_SHORT).show();

// 自定义位置
Toast toast = Toast.makeText(this, "消息", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
```

---

## 工具类代码片段

### 工具类示例

```java
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));
    }
}
```

### 权限请求

```java
// 检查权限
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 {
            // 权限被拒绝
        }
    }
}
```

### 图片加载

```java
// 使用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);
```

---

## 代码片段分类

### 按功能分类

```java
// 1. Activity相关
// - Activity创建
// - Activity跳转
// - Activity生命周期
// - Activity结果返回

// 2. Fragment相关
// - Fragment创建
// - Fragment事务
// - Fragment通信

// 3. 网络相关
// - Retrofit使用
// - OkHttp使用
// - 协程网络请求

// 4. 数据存储相关
// - SharedPreferences
// - Room数据库
// - 文件存储

// 5. UI相关
// - RecyclerView
// - Dialog
// - Toast
// - 自定义View

// 6. 工具类
// - 权限请求
// - 图片加载
// - 工具方法
```

### 按复杂度分类

```java
// 1. 基础代码片段
// - 简单的常用操作
// - 适合初学者

// 2. 中级代码片段
// - 需要一定理解
// - 包含最佳实践

// 3. 高级代码片段
// - 复杂实现
// - 性能优化
// - 架构设计
```

---

## 代码片段使用

### 如何使用代码片段

```java
// 1. 复制代码片段
// 2. 粘贴到项目中
// 3. 根据项目需求修改
// 4. 测试代码
// 5. 集成到项目
```

### 注意事项

```java
// 1. 检查依赖
// - 确保添加了必要的依赖库
// - 检查版本兼容性

// 2. 修改包名
// - 将示例包名改为项目包名
// - 检查导入语句

// 3. 适配项目
// - 根据项目架构调整代码
// - 遵循项目代码规范

// 4. 测试验证
// - 运行测试确保代码正确
// - 检查是否有错误或警告
```

### 代码片段模板

```java
// 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
    }
}
```

---

## 常用代码片段速查

### 快速查找

```java
// Activity跳转 → 查看"Activity代码片段"
// Fragment使用 → 查看"Fragment代码片段"
// 网络请求 → 查看"网络请求代码片段"
// 数据存储 → 查看"数据存储代码片段"
// UI组件 → 查看"UI组件代码片段"
// 工具方法 → 查看"工具类代码片段"
```

---

## 总结

代码片段是快速开发的利器。合理使用代码片段可以提高开发效率，但要注意根据项目需求进行适配和优化。

---

*最后更新：2024年*
