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