0

假设我有一个 listView 有一些这样的公式:

((A * 2 + B * 3 + PF * 5) / 10)

当我单击它时,我想将字母更改为EditTexts,所以我将其拆分String,如果它是一个字母,我应该用 EditText 替换它,那么,我应该用什么来实现呢?我的意思是,我可以在“对话框样式”窗口上加载一个活动吗?或者我可以使用简单对话框来完成这项工作?

我已经尝试过了,但是添加视图时出现错误(NullPointerException

lsView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override
public boolean onItemLongClick(AdapterView<?> aView, View view,
            int i, long l) {
    Dialog dialogFormula = new Dialog(NotasActivity.this); //"Parent" activity

    dialogFormula.setTitle("Title");

    LinearLayout layout = (LinearLayout)findViewById(R.id.DialogLayout);
    String[] lines = materias.get(i).getFormula().split(" ");
    for (String s : lines) {
        if (s.compareTo("PARTIC") == 0) {
            EditText edtPartic = new EditText(dialogFormula.getContext));
            layout.addView(edtPartic);
        } else if (s.contains("A") && s.compareTo("A") != 0) {
        } else if (s.compareTo("B") == 0) {
        } else if (s.compareTo("C") == 0) {
        } else if (s.compareTo("D") == 0) {
        } else if (s.compareTo("E") == 0) {
        } else if (s.compareTo("F") == 0) {
        } else if (s.compareTo("G") == 0) {
        } else if (s.compareTo("H") == 0) {
        } else if (s.compareTo("I") == 0) {
        } else if (s.compareTo("PF") == 0) {
    } 
                }
    dialogFormula.setContentView(layout);
    return false;
}
});

对话框公式.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" 
android:id="@+id/DialogLayout">



<TextView
    android:id="@+id/txtMateriaDialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" />


<TextView
    android:id="@+id/txtFormulaDialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" />

</LinearLayout>
4

2 回答 2

1

我建议你制作一个自定义对话框类。

public class FormulaDialog extends Dialog {

    public FormulaDialog(Context c) {
        super(c);
        setTitle("Title");
        setContentView(R.layout.dialog_formula);
    }

    public void updateLayout(String[] lines) {
        LinearLayout layout = (LinearLayout)findViewById(R.id.DialogLayout);
        for (String s : lines) {
            if (s.compareTo("PARTIC") == 0) {
                EditText edtPartic = new EditText(dialogFormula.getContext));
                layout.addView(edtPartic);
            } else if (s.contains("A") && s.compareTo("A") != 0) {
            } else if (s.compareTo("B") == 0) {
            } else if (s.compareTo("C") == 0) {
            } else if (s.compareTo("D") == 0) {
            } else if (s.compareTo("E") == 0) {
            } else if (s.compareTo("F") == 0) {
            } else if (s.compareTo("G") == 0) {
            } else if (s.compareTo("H") == 0) {
            } else if (s.compareTo("I") == 0) {
            } else if (s.compareTo("PF") == 0) {
            }
        }
    }
}

然后在您的活动中,您只需运行

String[] lines = materias.get(i).getFormula().split(" ");
FormulaDialog mFormulaDialog = new FormulaDialog(this);
mFormulaDialog.updateLayout(lines);
mFormulaDialog.show();
于 2012-05-28T18:52:46.993 回答
0

findViewById() 仅返回传递给当前 Activity 的 setContentView() 的 XML 中的视图,通常这是您的第一个 Activity 的 main.xml。由于DialogLayout在不同的 XML 中,因此该行返回 null:

LinearLayout layout = (LinearLayout)findViewById(R.id.DialogLayout);

您想膨胀dialog_formula.xml、修改它,然后将此 XML 传递给您的 Dialog;像这样:

View view = getLayoutInflater().inflate(R.layout.dialog_formula, null, false);

LinearLayout layout = (LinearLayout) view.findViewById(R.id.DialogLayout);
// Add your new EditTexts here

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setView(view);
dialog = builder.create();

为了解析你的公式,我有两个不同的建议:

  • 保留每个公式的用户变量计数,而不是一遍又一遍地解析相同的字符串。
  • 如果您必须解析,请像这样测试您的字符串:

    if("ABCDEFGHIPF".contains(s))
        // Add EditText
    else if(s.contains("PARTIC"))
        // Do something special
    // The rest are numbers or symbols
    
于 2012-05-28T18:40:48.780 回答