是的,onAttachFragment从Android 9中被弃用,您可以使用其他方法来实现类似的功能,具体取决于代码的上下文.但到目前为止,这不是必需的,因为您没有进行任何片段转换.
方法1
通过使用公共职能
ConversationFragment.java:
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import androidx.fragment.app.Fragment;
public class ConversationFragment extends Fragment {
private EditText editText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_conversation, container, false);
// Initialize EditText
editText = view.findViewById(R.id.editText);
return view;
}
public String getEditTextValue() {
return editText.getText().toString();
}
}
MainActivity.java:
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private ConversationFragment conversationFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the fragment
conversationFragment = new ConversationFragment();
// Add the fragment to the container
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, conversationFragment)
.commit();
// Initialize Button
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Get EditText value from the Fragment
String editTextValue = conversationFragment.getEditTextValue();
onDataReceivedFromFragment(editTextValue);
}
});
}
public void onDataReceivedFromFragment(String data) {
// Process the received data here
Log.d("Data received in Activity", data);
}
}
方法2
通过使用界面
ConversationFragment.java:
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import androidx.fragment.app.Fragment;
public class ConversationFragment extends Fragment {
private EditText editText;
private EditTextValueListener listener;
public interface EditTextValueListener {
void onEditTextValueChanged(String value);
}
public void setEditTextValueListener(EditTextValueListener listener) {
this.listener = listener;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_conversation, container, false);
// Initialize EditText
editText = view.findViewById(R.id.editText);
return view;
}
private void sendDataToActivity(String data) {
if (listener != null) {
listener.onEditTextValueChanged(data);
}
}
public void sendDataToActivity() {
String data = editText.getText().toString();
sendDataToActivity(data);
}
}
MainActivity.java:
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements ConversationFragment.EditTextValueListener {
private ConversationFragment conversationFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the fragment
conversationFragment = new ConversationFragment();
// Add the fragment to the container
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, conversationFragment)
.commit();
// Initialize Button
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Call method in Fragment to send EditText value
conversationFragment.sendDataToActivity();
}
});
}
@Override
public void onEditTextValueChanged(String value) {
// Process the received data here
Log.d("Data received in Activity", value);
}
}
确保您也相应更新布局文件(fragment_conversation.html和activity_main.html).