2017-01-16 105 views
0

所以这个错误不断出现。它发生在我打开微调器时。微调器在FragmentDialog中,如果这可以告诉你有关错误的任何信息。

android.content.res.Resources$NotFoundException: Resource ID #0x0 
        at android.content.res.Resources.getValue(Resources.java:1351) 
        at android.content.res.Resources.loadXmlResourceParser(Resources.java:2774) 
        at android.content.res.Resources.getLayout(Resources.java:1165) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:421) 
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:378) 
        at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:448) 
        at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:963) 
        at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:959) 
        at android.widget.Spinner.measureContentWidth(Spinner.java:833) 
        at android.widget.Spinner$DropdownPopup.computeContentWidth(Spinner.java:1194) 
        at android.widget.Spinner$DropdownPopup.show(Spinner.java:1220) 
        at android.widget.Spinner.performClick(Spinner.java:758) 
        at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:438) 
        at android.view.View$PerformClick.run(View.java:21147) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

,我一直在寻找这个问题的,现在两个小时源。

这里addMethod.java该适配器工作。

public class addMethod extends DialogFragment { 
boolean chooseAType = false; 
ArrayList<PaymentMethod> paymentMethods = new ArrayList<>(); 
Context context; 
String[] names; 
public addMethod newInstance(Context context) { 


    addMethod fragment = new addMethod(); 
    fragment.context =context; 
    return fragment; 
} 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.add_method_fragment, container); 
    getDialog().setTitle("Add payment method."); 
    final Spinner spinner = (Spinner) view.findViewById(R.id.methodSpinner); 
    names = getResources().getStringArray(R.array.PaymentTypes); 
    for(int i = 0;i < names.length;i++){ 

     paymentMethods.add(new PaymentMethod(names[i],i)); 

    } 
    paymentMethods.add(0,new PaymentMethod("Choose A Country",-1)); 

    MethodTypesAdapter methodTypesAdapter = new  MethodTypesAdapter(getActivity(),0,paymentMethods); 
    spinner.setAdapter(methodTypesAdapter); 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      chooseAType = true; 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
    final TextInputLayout editText = (TextInputLayout) view.findViewById(R.id.addNameInput); 
    TextView ok = (TextView) view.findViewById(R.id.okButton); 
    final int pos = spinner.getSelectedItemPosition(); 
    ok.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AddMethodFeedback addMethodFeedback = (AddMethodFeedback) getActivity(); 
      if (editText.getEditText().getText().toString().trim().length() != 0 && !chooseAType) { 
       getDialog().dismiss(); 
       addMethodFeedback.methodName(editText.getEditText().toString(), pos); 
      } 
     } 
    }); 
    TextView cancel = (TextView) view.findViewById(R.id.cancelButton); 
    cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getDialog().dismiss(); 
     } 
    }); 
    getDialog().setTitle(getTag()); 

    return view; 
} 
} 

而且继承人的MethodTypesAdapter.java类。

public class MethodTypesAdapter extends ArrayAdapter<PaymentMethod> { 
public MethodTypesAdapter(Context context, int resource, ArrayList<PaymentMethod> objects) { 
    super(context, 0, objects); 
} 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    PaymentMethod paymentMethod = getItem(position); 
    Utils utils = new Utils(null); 

    if (paymentMethod.getType() == -1) { 
     convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, null, false); 
     TextView name = (TextView) convertView.findViewById(android.R.id.text1); 
     name.setText(getContext().getResources().getString(R.string.chooseAMethod)); 
    } else { 

     convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_with_pic, null, false); 
     TextView name = (TextView) convertView.findViewById(R.id.itemsName); 
     name.setText(paymentMethod.getName()); 
     ImageView icon = (ImageView) convertView.findViewById(R.id.itemsIcon); 
     icon.setImageResource(utils.methodTypeIcons()[position]); 
    } 


    return convertView; 
} 
} 

回答

2

如果你打算使用一个Spinner,你需要call setDropDownViewResource() on your ArrayAdapter(或子类像MethodTypesAdapter),以提供用于当微调打开并显示用户选择滚动列表中选择布局资源从。因此,例如,您可以在MethodTypesAdapter的构造函数和getView()中使用android.R.layout.simple_spinner_item,并使用android.R.layout.simple_spinner_dropdown_itemsetDropDownViewResource()

+0

它的工作!非常感谢 – Ahmad

0

为了增加CommonsWare的回答是:

或者如果你正在使用自己的自定义ArrayAdapter有微调需要实现/重写getDropDownView(...)方法以及常用的getView(... ) 方法。

相关问题