【发布时间】:2026-01-16 06:20:09
【问题描述】:
我有 80 个按钮,用户必须能够通过长按事件重命名这些按钮并保存新的按钮文本。当用户关闭应用程序时,它必须保持相同的文本,并且不能回到默认文本。这就是我的第一个按钮。我将如何做到这一点,以便它知道哪个按钮被长按并重命名。 (这个编码出去的时候不保存)
public class MainActivity extends AppCompatActivity {
private Button btn1 , btn2 , btn3 , btn4 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View.OnLongClickListener listener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showPopup(v);
return true; //Nothing shows error, but this part where i tried to set a onLongClick listener.
}
};
btn1.setOnLongClickListener(listener);
btn2.setOnLongClickListener(listener);
btn3.setOnLongClickListener(listener);
btn4.setOnLongClickListener(listener);
SharedPreferences prefs = getSharedPreferences("btnID", Context.MODE_PRIVATE);
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Button button = (Button) findViewById(Integer.parseInt(entry.getKey()));
button.setText(entry.getValue().toString());
}
}
private void showPopup(View v) {
//here you have your button
final Button currentButton = (Button)v;
v.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showPopup(v);
return true;
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Rename to?");
View view = LayoutInflater.from(this).inflate(R.layout.dialog_view, null);
final EditText edit_dialog = (EditText)view.findViewById(R.id.edit_dialog);
edit_dialog.setText(currentButton.getText().toString());
builder.setView(view);
builder.setPositiveButton("confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
currentButton.setText(edit_dialog.getText().toString());
SharedPreferences prefs = getSharedPreferences("btnID", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(String.valueOf(currentButton.getId()), currentButton.getText().toString());
editor.apply();
}
});
builder.show();
}
}
【问题讨论】: