From 685812c2040b48d06422caa61c03666c9ffa3952 Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期二, 21 一月 2025 13:45:40 +0800
Subject: [PATCH] #
---
app/src/main/res/layout/edite_view.xml | 2
app/src/main/java/com/example/agvcontroller/StartActivity.java | 18 ++++
app/src/main/java/com/example/agvcontroller/EditeActivity.java | 28 ++++++
app/src/main/java/com/example/agvcontroller/EditeAdapter.java | 109 ++++++++++++++++++++++++++-
app/src/main/res/layout/activity_edite.xml | 36 ++++++--
5 files changed, 176 insertions(+), 17 deletions(-)
diff --git a/app/src/main/java/com/example/agvcontroller/EditeActivity.java b/app/src/main/java/com/example/agvcontroller/EditeActivity.java
index b1b0f7a..784ae80 100644
--- a/app/src/main/java/com/example/agvcontroller/EditeActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/EditeActivity.java
@@ -1,10 +1,14 @@
package com.example.agvcontroller;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
+import android.view.View;
+import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.AppCompatImageButton;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -21,23 +25,44 @@
private List<Item> items;
private EditeAdapter adapter;
private SharedPreferences sharedPreferences;
+ private AppCompatImageButton addItem;
+ private Button confirm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edite);
-
+ addItem = findViewById(R.id.add_button);
+ confirm = findViewById(R.id.confirm_button);
sharedPreferences = getSharedPreferences("AGVControllerPrefs", MODE_PRIVATE);
// Load items from SharedPreferences
items = loadItemsFromSharedPreferences();
+
recyclerView = findViewById(R.id.edite_recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+
Log.d("EditeActivity", "onCreate: " + items.size());
adapter = new EditeAdapter(items);
recyclerView.setAdapter(adapter);
+ addItem.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ items.add(new Item("", "", 0, "", 0));
+ adapter.notifyDataSetChanged();
+ Log.d("items", items.toString());
+ }
+ });
+ confirm.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ saveItemsToSharedPreferences();
+ }
+ });
}
@Override
@@ -52,6 +77,7 @@
Gson gson = new Gson();
String json = gson.toJson(items);
editor.putString("items", json);
+ Log.d("save",json);
editor.apply();
}
diff --git a/app/src/main/java/com/example/agvcontroller/EditeAdapter.java b/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
index e9a3925..3f6fa2f 100644
--- a/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
+++ b/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
@@ -1,21 +1,25 @@
package com.example.agvcontroller;
import android.graphics.Color;
+import android.text.Editable;
+import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
+import androidx.appcompat.widget.AppCompatImageButton;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class EditeAdapter extends RecyclerView.Adapter<EditeAdapter.ViewHolder> {
- private List<Item> itemList;
+ private static List<Item> itemList;
public EditeAdapter(List<Item> itemList) {
this.itemList = itemList;
@@ -24,11 +28,60 @@
public static class ViewHolder extends RecyclerView.ViewHolder {
EditText agvNo;
EditText ip;
+ AppCompatImageButton btn;
public ViewHolder(@NonNull View itemView) {
super(itemView);
agvNo = itemView.findViewById(R.id.agvNo);
ip = itemView.findViewById(R.id.ip);
+ btn = itemView.findViewById(R.id.delete_button);
+
+ // 璁剧疆 agvNo 鐨勬枃鏈彉鍖栫洃鍚�
+ agvNo.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // 鏂囨湰鍙樺寲涔嬪墠
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // 鏂囨湰鍙樺寲鏃�
+ }
+
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // 鏂囨湰鍙樺寲涔嬪悗
+ int position = getAdapterPosition();
+ if (position != RecyclerView.NO_POSITION) {
+ Item item = itemList.get(position);
+ item.setAgvNo(s.toString()); // 鏇存柊鏁版嵁婧�
+ }
+ }
+ });
+
+ // 璁剧疆 ip 鐨勬枃鏈彉鍖栫洃鍚�
+ ip.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // 鏂囨湰鍙樺寲涔嬪墠
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // 鏂囨湰鍙樺寲鏃�
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // 鏂囨湰鍙樺寲涔嬪悗
+ int position = getAdapterPosition();
+ if (position != RecyclerView.NO_POSITION) {
+ Item item = itemList.get(position);
+ item.setIp(s.toString()); // 鏇存柊鏁版嵁婧�
+ }
+ }
+ });
itemView.setOnClickListener(new View.OnClickListener() {
@Override
@@ -36,6 +89,7 @@
Log.i("List","123");
}
});
+
}
}
@@ -66,6 +120,12 @@
void onItemClick(View view,int position);
}
+ public void removeItem(int position) {
+ itemList.remove(position);
+ notifyItemRemoved(position);
+ notifyItemRangeChanged(position, itemList.size()); // 鏇存柊鍓╀綑椤圭殑浣嶇疆
+ }
+
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (itemList == null || itemList.isEmpty()) {
@@ -82,18 +142,57 @@
holder.itemView.setBackgroundColor(Color.parseColor("#90EE90"));
break;
}
- holder.agvNo.setText("AGV_NO锛� " + item.getAgvNo());
- holder.ip.setText("AGV_IP锛� " + item.getIp());
+ // 娓呴櫎鏃х殑 TextWatcher
+ holder.agvNo.removeTextChangedListener((TextWatcher) holder.agvNo.getTag());
+ holder.ip.removeTextChangedListener((TextWatcher) holder.ip.getTag());
- holder.itemView.setTag(position);
+ // 璁剧疆褰撳墠鏂囨湰
+ holder.agvNo.setText(item.getAgvNo());
+ holder.ip.setText(item.getIp());
+
+ // 娣诲姞鏂扮殑 TextWatcher
+ TextWatcher agvNoWatcher = new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ item.setAgvNo(s.toString());
+ }
+ };
+ holder.agvNo.addTextChangedListener(agvNoWatcher);
+ holder.agvNo.setTag(agvNoWatcher);
+
+ TextWatcher ipWatcher = new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ item.setIp(s.toString());
+ }
+ };
+ holder.ip.addTextChangedListener(ipWatcher);
+ holder.ip.setTag(ipWatcher);
}
+ // 璁剧疆鍒犻櫎鎸夐挳鐨勭偣鍑讳簨浠�
+ holder.btn.setOnClickListener(v -> {
+ Log.i("List",itemList.toString());
+ removeItem(position); // 璋冪敤鍒犻櫎鏂规硶
+ });
}
@Override
public int getItemCount() {
if (itemList == null || itemList.isEmpty()) {
- return 1;
+ return 0;
} else {
return itemList.size();
}
diff --git a/app/src/main/java/com/example/agvcontroller/StartActivity.java b/app/src/main/java/com/example/agvcontroller/StartActivity.java
index 74142f4..628ccb8 100644
--- a/app/src/main/java/com/example/agvcontroller/StartActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/StartActivity.java
@@ -2,6 +2,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -12,11 +13,14 @@
import androidx.recyclerview.widget.RecyclerView;
import com.example.agvcontroller.socket.SocketManager;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
@@ -26,6 +30,7 @@
private List<Item> items;
private ItemAdapter adapter;
private Button addItem;
+ private SharedPreferences sharedPreferences;
SocketManager socketManager;
@Override
@@ -45,7 +50,10 @@
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ sharedPreferences = getSharedPreferences("AGVControllerPrefs", MODE_PRIVATE);
+ // Load items from SharedPreferences
+ items = loadItemsFromSharedPreferences();
items = new ArrayList<>();
@@ -76,6 +84,16 @@
socketManager.startServer(8022);
}
+ private List<Item> loadItemsFromSharedPreferences() {
+ Gson gson = new Gson();
+ String json = sharedPreferences.getString("items", null);
+ if (json != null) {
+ Type type = new TypeToken<List<Item>>(){}.getType();
+ return gson.fromJson(json, type);
+ }
+ return new ArrayList<>();
+ }
+
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDeviceConnected(Item deviceAddress) {
Log.i("EventBus", "Received device connected: " + deviceAddress);
diff --git a/app/src/main/res/layout/activity_edite.xml b/app/src/main/res/layout/activity_edite.xml
index 0d1f37b..7f088af 100644
--- a/app/src/main/res/layout/activity_edite.xml
+++ b/app/src/main/res/layout/activity_edite.xml
@@ -45,6 +45,19 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
+
+ <ImageButton
+ android:id="@+id/add_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:padding="10dp"
+ android:src="@android:drawable/ic_menu_add"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ tools:ignore="MissingConstraints"
+ tools:layout_editor_absoluteY="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -52,21 +65,24 @@
android:id="@+id/edite_recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
- app:layout_constraintBottom_toTopOf="@+id/addButton"
+ app:layout_constraintBottom_toTopOf="@id/confirm_button"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/header"
- app:layout_constraintVertical_bias="1.0" />
+ app:layout_constraintVertical_bias="0.0" />
- <ImageButton
- android:id="@+id/addButton"
- android:layout_width="wrap_content"
+ <Button
+ android:id="@+id/confirm_button"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:src="@android:drawable/ic_input_add"
- android:background="?attr/selectableItemBackgroundBorderless"
- android:padding="10dp"
- tools:ignore="MissingConstraints" />
+ android:layout_margin="20dp"
+ android:text="瀹屾垚"
+
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent" />
diff --git a/app/src/main/res/layout/edite_view.xml b/app/src/main/res/layout/edite_view.xml
index ff92542..4fc7898 100644
--- a/app/src/main/res/layout/edite_view.xml
+++ b/app/src/main/res/layout/edite_view.xml
@@ -55,7 +55,7 @@
</LinearLayout>
<ImageButton
- android:id="@+id/deleteButton"
+ android:id="@+id/delete_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
--
Gitblit v1.9.1