Я искал способ реализовать разные DialogFragment в одном упражнении. Я нашел несколько способов, но они основаны на стиле цепочки от фрагмента к фрагменту, поэтому не нуждаются в разных макетах.
Я работаю над приложением формы, и когда вводится информация о фрагменте, мне нужно перейти к основному действию, потому что необходимая информация не всегда готова, и приоритет отдается свободному вводу.
Теперь у меня есть фрагмент Dialog, реализованный в основной деятельности, и это не позволяет мне добавить еще один, по крайней мере, способами, которые я пытался. Я читал о создании родительского фрагмента и связывал дочерние фрагменты и вызывал их по мере необходимости, но, как я уже говорил ранее, этот способ связывает один макет с родительским, и я не уверен, как разместить другой.
В настоящее время у меня есть одна функция MainActivity, которая направляет меня к одному DialogFragment (FpsDialog), и другая кнопка, которая направляет меня к другому виду деятельности и тоже хочу преобразовать в диалоговое окно.
Вот код моей основной деятельности
package com.komorebiestudio.cam_report_funcionality;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements FpsDialog.FpsDialogListener {
private TextView textViewinfo1;
private Button button1;
private Button lensButton;
private TextView lensInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lensInfo = findViewById(R.id.lensinfo);
lensInfo.setText(getIntent().getStringExtra("LensIntent"));
textViewinfo1 = findViewById(R.id.info1);
button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
openDialog();
}
});
lensButton = findViewById(R.id.lensbutton);
lensButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MainActivity.this,LensActivity.class));
}
});
}
public void openDialog(){
FpsDialog fps_dialog = new FpsDialog();
fps_dialog.show(getSupportFragmentManager(),"Fps Dialog");
}
@Override
public void applyText(String fpsinfo) {
textViewinfo1.setText(fpsinfo);
}
}
Код из моего диалогаFragment
package com.komorebiestudio.cam_report_funcionality;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class FpsDialog extends AppCompatDialogFragment {
private EditText editTextFpsEntry;
private FpsDialogListener listener;
private Button buttonfps2397;
private Button buttonfps50;
private Button buttonfps24;
private Button buttonfps48;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.fps_dialog, null);
builder.setView(view)
.setTitle("Set Fps")
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String fpsinfo = editTextFpsEntry.getText().toString();
listener.applyText(fpsinfo);
}
});
editTextFpsEntry = view.findViewById(R.id.fpsEntry);
buttonfps2397 = view.findViewById(R.id.fps2397);
buttonfps50 = view.findViewById(R.id.fps50);
buttonfps24 = view.findViewById(R.id.fps24);
buttonfps48 = view.findViewById(R.id.fps48);
buttonfps2397.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String setFps2397 = "23,97";
listener.applyText(setFps2397);
dismiss();
}
});
buttonfps50.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String setFps50 = "50";
listener.applyText(setFps50);
dismiss();
}
});
buttonfps24.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String setFps24 = "24";
listener.applyText(setFps24);
dismiss();
}
});
buttonfps48.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String setFps48 = "48";
listener.applyText(setFps48);
dismiss();
}
});
return builder.create();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (FpsDialogListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString()+
"must implement Lens Dialog Listener");
}
}
public interface FpsDialogListener{
void applyText(String fpsinfo);
}
}
и код RecyclerView, который я хочу добавить в качестве диалога.
package com.komorebiestudio.cam_report_funcionality;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
public class LensActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private LensAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public String lensString;
public String brandLens;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lens_activity);
final ArrayList <LensItem> lensList = new ArrayList<>();
lensList.add(new LensItem(R.drawable.zeiss,"24mm ","Zeiss Compact Prime"));
lensList.add(new LensItem(R.drawable.angenieux,"35mm ","Angenieux"));
lensList.add(new LensItem(R.drawable.cooke,"50mm ","Cooke S5I"));
lensList.add(new LensItem(R.drawable.zeiss,"85mm ","Zeiss Compact Prime"));
lensList.add(new LensItem(R.drawable.angenieux,"135mm ","Angenieux"));
lensList.add(new LensItem(R.drawable.cooke,"100mm ","Cooke S5I"));
mRecyclerView = findViewById(R.id.lens_list);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mAdapter = new LensAdapter(lensList);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new LensAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
//Crea String con la informacion de posicion y texto del lente
String lensPosition = lensList.get(position).getLens();
String lensbrand = lensList.get(position).getBrandLens();
brandLens =lensbrand;
lensString = lensPosition + lensbrand;
//Crea un Intent para enviar la informacion de lensString a la MainActivity
Intent lensIntent = new Intent(LensActivity.this,MainActivity.class);
lensIntent.putExtra("LensIntent",lensString);
//Al utilizar startActivity con lensIntent como parametro cierro el Intent y paso a la activity declarada.
startActivity(lensIntent);
}
});
}
}