【发布时间】:2014-12-16 22:13:32
【问题描述】:
我想从我的 MainActivity 创建一个对话框,带有一个接受和取消按钮,它有一个自定义视图(我已经创建了它,一个布局)。在那个自定义对话框中,我必须用我给他的 ArrayList 填充 2 个微调器(顺便说一句,我不知道该怎么做),我希望用户从这两个微调器中选择选项,使它们成为点击“接受”所必需的,当用户点击“接受”时,我必须将他的创作添加到我的数据库中。
我完全迷路了,我只创建了这个布局,那是对话框的视图,我不知道该怎么做...有人请帮助我,这非常令人沮丧=(
这是对话框的 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_evento"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Spinner
android:id="@+id/spinnerEvento"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_accion"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Spinner
android:id="@+id/spinnerAccion"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
这是集体诉讼:
package com.nahue.actions;
public class Action {
//declaración de atributos
private int Id;
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public int getIdAccion() {
return IdAccion;
}
public void setIdAccion(int idAccion) {
IdAccion = idAccion;
}
public int getIdEvento() {
return IdEvento;
}
public void setIdEvento(int idEvento) {
IdEvento = idEvento;
}
public boolean getActiva() {
return Activa;
}
public void setActiva(boolean activa) {
Activa = activa;
}
private int IdAccion;
private int IdEvento;
private boolean Activa;
//declaración de constructor
public Action(int Id, int IdAccion, int IdEvento, boolean Activa){
this.Id = Id; //Autonumérico
this.IdAccion = IdAccion;
this.IdEvento = IdEvento;
this.Activa = Activa;
}
}
这是 DialogActions 类:
package com.nahue.actions;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.os.Parcelable;
import android.app.DialogFragment;
// ...
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import com.nahue.actions.R;
public class DialogActions extends DialogFragment
{
private Button cancelButton;
private Button confirmButton;
private DialogActions DialogListener;
private Spinner spinnerAccion;
private Spinner spinnerEvento;
public DialogActions()
{
// Empty constructor required for DialogFragment
}
//This is how you can supply your fragment with information
public static DialogActions newInstance(ArrayList<Action> ListaActions)
{
DialogActions myDialog = new DialogActions();
Bundle args = new Bundle();
args.putParcelableArrayList("ListaActions", ArrayList<Action> ListaActions);//Errors: ArrayList and Action cannot be resolved into variables
myDialog.setArguments(args);
return myDialog;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, 0); // remove title from dialogfragment
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.dialog_actions, container);
//DECLARO LOS ELEMENTOS EN EL LAYOUT
//Setup cancel button listener
cancelButton = (Button) view.findViewById(R.id.cancelButton);
cancelButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
getDialog().dismiss();
}
});
//Setup confirm button listener
confirmButton = (Button) view.findViewById(R.id.confirmButton);
confirmButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//AGREGAR A LA BD
getDialog().dismiss();
}
});
return view;
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
if (activity instanceof DialogActions) //Error: Incompatible conditional operand types Activity and DialogActions
{
DialogListener = (DialogActions) activity; //Error: "Cannot cast from Activity to DialogActions"
}
else
{
throw new ClassCastException(activity.toString() + " must implement StartProfileDialog.StartProfileListener");
}
}
}
【问题讨论】:
-
好的,我知道你做错了什么。您缺少界面。仔细看看 StartProfilerListener,它与 StartProfileDialog 是分开的。你会想做一些类似 public interface DialogActionsListener { void doAction(int spinnerVal 1, int spinnerVal 2); } 然后是私有的 DialogActionsListener dialogListener;
-
是的!你是对的,固定的。现在我唯一需要知道的是如何使 Actions 可打包,我无法理解你给我的链接:S
-
您需要让您的 Actions 对象实现 Parcelable,然后扩展 ArrayList 以创建一个也实现 Parcelable 的自定义 ActionList。然后您应该能够在您的应用程序中使用 Parcelable 功能。我实际上还没有完成任何 Parcelable 编码,所以在你尝试了一段时间之后,你可能会想提出一个新问题。
-
好的,我会提出一个新问题。无论如何,非常感谢你,你帮了我很多! :D
标签: android database dialog android-alertdialog