FindviewbyId 方法在片段中不起作用



我有片段主页消息和设置。我正在将我的消息片段替换为具有编辑文本视图和微调器的 Fat 计算器。但是findviewbyid方法中遇到了问题,我尝试了"rootview"但没有解决。

import android.os.Bundle; 
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;

public class MessageFragment extends Fragment implements AdapterView.OnItemSelectedListener {
Spinner spinnerFat;
EditText editTextAns;
public MessageFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_message, container, false);

在这里,我在读取值时遇到错误:

    editTextAns = (EditText) findViewById(R.id.editTextAns);
    spinnerFat = (Spinner) findViewById(R.id.spinnerFat);

两行以上并且还存在错误,它无法从值文件夹创建资源,并且在this关键字上出错。

    ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.Fat, R.layout.support_simple_spinner_dropdown_item);

-- 因为我正在使用来自值的胖命名数组

    spinnerFat.setAdapter(adapter);
    spinnerFat.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int i, long l) {
    switch (i) {
        case 0:
        {
            //please selecet an item
            break;
        }
        case 1:
        {
            //ghee
            editTextAns.setText("65% Saturated Fat, 32% of Mono-unsaturated Fat");
            break;
        }
        case 2:
        {
            //Banaspati
            editTextAns.setText("24% Saturated Fat, 19% of Mono-unsaturated Fat");
            break;
        }
        case 3:
        {
            //Red Palm Oil
            editTextAns.setText("50% Saturated Fat, 40% of Mono-unsaturated Fat");
            break;
        }
        case 4:
        {
            //Palm Oil
            editTextAns.setText("45% Saturated Fat, 44% of Mono-unsaturated Fat");
            break;
        }
        case 5:
        {
            //coconut oil
            editTextAns.setText("90% Saturated Fat, 7% of Mono-unsaturated Fat");
            break;
        }
        case 6:
        {
            //Palm kernal oil
            editTextAns.setText("82% Saturated Fat, 15% of Mono-unsaturated Fat");
            break;
        }
        case 7:
        {
            //olive oil
            editTextAns.setText("13% Saturated Fat, 76% of Mono-unsaturated Fat");
            break;
        }
        case 8:
        {
            //groundunt oil
            editTextAns.setText("24% Saturated Fat, 50% of Mono-unsaturated Fat");
            break;
        }
        case 9:
        {
            //mustard oil
            editTextAns.setText("8% Saturated Fat, 70% of Mono-unsaturated Fat");
            break;
        }
        case 10:
        {
            //sesame oil
            editTextAns.setText("15% Saturated Fat, 42% of Mono-unsaturated Fat");
            break;
        }
        case 11:
        {
            //rice bran oil
            editTextAns.setText("22% Saturated Fat, 41% of Mono-unsaturated Fat");
            break;
        }
        case 12:
        {
            //cotton seed oil
            editTextAns.setText("22% Saturated Fat, 25% of Mono-unsaturated Fat");
            break;
        }
        case 13:
        {
            //corn oil
            editTextAns.setText("12% Saturated Fat, 32% of Mono-unsaturated Fat");
            break;
        }
        case 14:
        {
            //sunflowre
            editTextAns.setText("13% Saturated Fat, 27% of Mono-unsaturated Fat");
            break;
        }
        case 15:
        {
            //saffron oil
            editTextAns.setText("13% Saturated Fat, 17% of Mono-unsaturated Fat");
            break;
        }
    }
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
 }
您需要

夸大片段的视图,并在它返回View调用findViewById()

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_message, container, false);
    editTextAns = (EditText) v.findViewById(R.id.editTextAns);
    spinnerFat = (Spinner) v.findViewById(R.id.spinnerFat);
    return v;
}

阵列适配器:

ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.Fat, R.layout.support_simple_spinner_dropdown_item);

onCreateView片段方法中,得到如下所示View

View view = inflater.inflate(R.layout.fragment_message, container, false);

然后使用

editTextAns = (EditText) view.findViewById(R.id.editTextAns);
spinnerFat = (Spinner) view.findViewById(R.id.spinnerFat);

它会起作用的。

试试这个:

在 onActivity中创建片段的方法

editTextAns = (EditText) getActivity().findViewById(R.id.editTextAns);
spinnerFat = (Spinner) getActivity().findViewById(R.id.spinnerFat);

你需要做getView().findViewById()而不是只有findviewbyid()对于数组适配器,您需要传递 getActivity() 来代替"this"

editTextAns = (EditText)getView().findViewById(R.id.editTextAns); 
spinnerFat = (Spinner)getView().findViewById(R.id.spinnerFat);

ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.Fat, R.layout.support_simple_spinner_dropdown_item);

最新更新