假设我有一个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;
}
});
dialog_formula.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>
答案 0 :(得分: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();
答案 1 :(得分:0)
findViewById()仅返回传递给当前Activity的setContentView()的XML中的视图,通常这是您第一个活动的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