Android 无法访问PopupWindow中布局中的资源,对象为空引用
我有一个android应用程序,当点击侧栏上的一个选项时,它会进入一个片段,然后进入另一个具有可点击单选按钮的片段。单击这些按钮时,将创建一个弹出窗口,其中包含一些文本字段 基本上这就是流动的方式 活动-->片段1-->片段2-->弹出窗口 当我尝试访问此popupWindow中的资源时,例如:Android 无法访问PopupWindow中布局中的资源,对象为空引用,android,android-fragments,Android,Android Fragments,我有一个android应用程序,当点击侧栏上的一个选项时,它会进入一个片段,然后进入另一个具有可点击单选按钮的片段。单击这些按钮时,将创建一个弹出窗口,其中包含一些文本字段 基本上这就是流动的方式 活动-->片段1-->片段2-->弹出窗口 当我尝试访问此popupWindow中的资源时,例如: damageComponenetAutoCompleteTextview = (AutoCompleteTextView) findViewById(R.id.popup_damage_componen
damageComponenetAutoCompleteTextview = (AutoCompleteTextView) findViewById(R.id.popup_damage_component_item);
damageComponenetAutoCompleteTextview.requestFocus();
在行damageComponenetAutoCompleteTextview.requestFocus()中这给了我一个错误
尝试对空对象引用调用虚拟方法
我相信这是因为我在调用资源时所指的错误观点。希望有人能指出我做错了什么。提前谢谢
这是我用来创建popupWindow的方法
public void showDamagedItemEntryPopup(RadioButton radioButton, View view){
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup viewG = ((ViewGroup)view.findViewById(R.id.damaged_comp_popup));
//I tried passing the root view to inflate() method instead of passing it null. Didn't work.
//View popupView = layoutInflater.inflate(R.layout.component_selection_popup, null);
View popupView = layoutInflater.inflate(R.layout.component_selection_popup, null);
final PopupWindow popupWindow = new PopupWindow(
popupView,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setAnimationStyle(R.style.popupAnimation);
//I tried setting the content view manually but didnt work
//popupWindow.setContentView(view.findViewById(R.id.damaged_comp_popup));
Button buttonClose = (Button)popupView.findViewById(R.id.close_add_component_btn);
// Close button damaged item popop window
buttonClose.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
originalAmount = (EditText)this.findViewById(R.id.popup_add_component_original_amount);
customerContribution = (EditText)this.findViewById(R.id.popup_percentage);
quantity = (EditText)this.findViewById(R.id.popup_quantity);
finalAmount = (EditText)this.findViewById(R.id.popup_add_component_final_amount);
remarks = (EditText)this.findViewById(R.id.popup_add_component_remarks);
// Item Spinner
itemSpinnerArray = new ArrayList<String>();
itemSpinnerArray.add("Select Item");
// Status Spinner
ArrayList<String> statusSpinnerArray = new ArrayList<String>();
statusSpinnerArray.add("MR");
statusSpinnerArray.add("DR");
statusSpinnerArray.add("SP");
// Error comes at this point initially. When these Resource access line codes are commented, the popup works fine.
damageComponenetAutoCompleteTextview = (AutoCompleteTextView) findViewById(R.id.popup_damage_component_item);
damageComponenetAutoCompleteTextview.requestFocus();
ArrayAdapter<String> itemSpinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, itemSpinnerArray);
damageComponenetAutoCompleteTextview.setThreshold(1);
damageComponenetAutoCompleteTextview.setAdapter(itemSpinnerArrayAdapter);
damageComponenetAutoCompleteTextview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//int index = cityNames.indexOf(actvCity.getText().toString());
itemSpinnerValue = (String) parent.getItemAtPosition(position);
Log.d("SK-->", "----------------------------------------------------------");
Log.d("SK-->","itemSpinnerValue: " + itemSpinnerValue);
}
});
statusSpinner = (Spinner)this.findViewById(R.id.popup_status_spinner);
ArrayAdapter<String> statusSpinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, statusSpinnerArray);
statusSpinner.setAdapter(statusSpinnerArrayAdapter);
//Creating a text Watcher
TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
//here, after we introduced something in the EditText we get the string from it
//String answerString = originalAmount.getText().toString();
if (originalAmount.getText().toString().trim().equals("") || customerContribution.getText().toString().trim().equals("")
|| quantity.getText().toString().trim().equals("")) {
// Error , one or more editText are empty
}
else
{
calculateFinalAmount();
}
//and now we make a Toast
//modify "yourActivity.this" with your activity name .this
//Toast.makeText(yourActivity.this,"The string from EditText is: "+answerString,0).show();
}
};
// Adding Text Watcher to our text boxes
originalAmount.addTextChangedListener(textWatcher);
customerContribution.addTextChangedListener(textWatcher);
quantity.addTextChangedListener(textWatcher);
// Show the popup
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
}
public void showDamagedItem弹出窗口(RadioButton RadioButton,视图){
LayoutInflater LayoutInflater=(LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
ViewGroup viewG=((ViewGroup)view.findViewById(R.id.discovered_comp_popup));
//我尝试将根视图传递给inflate()方法,而不是将其传递为null。不起作用。
//View popupView=LayoutFlater.充气(R.layout.component\u selection\u popup,null);
View popupView=LayoutFlater.充气(R.layout.component\u selection\u popup,null);
最终PopupWindow PopupWindow=新PopupWindow(
弹出视图,
ViewGroup.LayoutParams.WRAP_内容,
ViewGroup.LayoutParams.WRAP_内容);
popupWindow.setAnimationStyle(R.style.popupAnimation);
//我尝试手动设置内容视图,但没有成功
//popupWindow.setContentView(view.findViewById(R.id.discovered_comp_popup));
按钮按钮关闭=(按钮)弹出视图.findViewById(R.id.close\u add\u component\u btn);
//关闭按钮损坏的物品弹出窗口
buttonClose.setOnClickListener(新建Button.OnClickListener(){
@凌驾
公共void onClick(视图v){
popupWindow.disclose();
}
});
originalAmount=(EditText)this.findViewById(R.id.popup\u add\u component\u original\u amount);
customerContribution=(EditText)this.findViewById(R.id.popup\u百分比);
数量=(EditText)this.findViewById(R.id.popup\u数量);
finalAmount=(EditText)this.findViewById(R.id.popup\u add\u component\u final\u amount);
备注=(EditText)this.findViewById(R.id.popup\u add\u component\u备注);
//项目微调器
itemspinnerary=newarraylist();
添加(“选择项”);
//状态微调器
ArrayList StatusSpinneArray=新建ArrayList();
StatusSpinNerray.add(“MR”);
StatusSpinNerray.add(“DR”);
StatusSpinNerray.add(“SP”);
//错误最初出现在这一点上。当这些资源访问行代码被注释时,弹出窗口工作正常。
damageComponenetAutoCompleteTextview=(AutoCompleteTextView)findViewById(R.id.popup\u损坏\组件\项目);
damageComponenetAutoCompleteTextview.requestFocus();
ArrayAdapter ItemSpinNerayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u spinner\u dropdown\u ItemSpinNerary);
损坏组件AutoCompleteTextView.setThreshold(1);
损坏组件自动完成TextView.setAdapter(ItemSpinNearrayaAdapter);
DamageComponeneTaAutoCompleteTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//int index=cityNames.indexOf(actvCity.getText().toString());
itemSpinnerValue=(字符串)parent.getItemAtPosition(位置);
Log.d(“SK-->”,“------------------------------------------------------------------”;
Log.d(“SK-->”,“itemSpinnerValue:”+itemSpinnerValue);
}
});
statusSpinner=(Spinner)this.findViewById(R.id.popup\u status\u Spinner);
ArrayAdapter StatusSpinNerayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u下拉菜单\u项StatusSpinNerary);
statusSpinner.setAdapter(StatusSpinNearrayaAdapter);
//创建文本监视程序
TextWatcher TextWatcher=新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
//在这里,我们在EditText中引入了一些内容之后,我们从中获得了字符串
//字符串answerString=originalAmount.getText().toString();
如果(originalAmount.getText().toString().trim().equals(“”| | customerContribution.getText().toString().trim().equals(“”)
||quantity.getText().toString().trim()等于(“”){
//错误,一个或多个editText为空
}
其他的
{
calculateFinalAmount();
}
//现在我们干杯
//用您的活动名称修改“yourActivity.this”。此
//Toast.makeText(yourActivity.this,“EditText中的字符串是:“+answerString,0.show()”;
}
};
//向文本框中添加文本监视程序
originalAmount.addTextChangedListener(textWatcher);
customerContribution.addTextChangedListener(textWatcher);
quantity.addTextChangedListener(textWatcher);
//显示弹出窗口
弹出窗口显示位置(视图,重心,0,0);
}
这是我用于弹出窗口的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/damaged_comp_popup"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/popup_wire">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="2dp"
android:background="@color/popup_background">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/popup_damage_component_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="5dp"
android:hint="@string/damaged_componenet_item_string"/>
<Spinner
android:id="@+id/popup_status_spinner"
android:layout_width="122dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/popup_damage_component_item"
android:layout_marginLeft="10dp"
android:layout_marginTop="0dp"
android:layout_marginBottom="5dp"
android:layout_marginRight="5dp" />
<EditText
android:id="@+id/popup_add_component_original_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/popup_damage_component_item"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="22dp"
android:layout_toRightOf="@+id/popup_status_spinner"
android:ems="10"
android:hint="@string/original_amount_string"
android:inputType="number" />
<EditText
android:id="@+id/popup_percentage"
android:layout_width="52dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/popup_status_spinner"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="2dp"
android:layout_marginTop="22dp"
android:ems="10"
android:hint="@string/percentage_string"
android:inputType="number" />
<TextView
android:id="@+id/popup_percentageMark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/popup_percentage"
android:layout_toRightOf="@+id/popup_percentage"
android:text="@string/percentage_string"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginLeft="1dp"
android:layout_marginRight="0dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<EditText
android:id="@+id/popup_quantity"
android:layout_width="46dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/popup_percentage"
android:layout_alignBottom="@+id/popup_percentage"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="6dp"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/popup_percentageMark"
android:ems="10"
android:hint="@string/quantity_string"
android:inputType="number" />
<EditText
android:id="@+id/popup_add_component_final_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/popup_quantity"
android:layout_alignBottom="@+id/popup_quantity"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/popup_quantity"
android:ems="10"
android:hint="@string/final_amount_string"
android:inputType="number" />
<EditText
android:id="@+id/popup_add_component_remarks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/popup_percentage"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="22dp"
android:ems="10"
android:hint="@string/remarks_string"
android:inputType="text|textMultiLine" />
<Button
android:id="@+id/add_component_btn"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_marginLeft="200dp"
android:layout_below="@+id/popup_add_component_remarks"
android:background="@drawable/correct"
android:layout_marginBottom="15dp"
android:onClick="onSaveItem"/>
<Button
android:id="@+id/close_add_component_btn"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_below="@+id/popup_add_component_remarks"
android:layout_toRightOf="@+id/add_component_btn"
android:layout_marginLeft="10dp"
android:background="@drawable/cancel"/>
</RelativeLayout>
</LinearLayout>
您的
损坏组件自动完成文本视图似乎属于您在顶部充气的弹出窗口
damageComponenetAutoCompleteTextview = (AutoCompleteTextView) findViewById(R.id.popup_damage_component_item);
damageComponenetAutoCompleteTextview = (AutoCompleteTextView) popupView.findViewById(R.id.popup_damage_component_item);