【问题标题】:Select Spinner item value选择微调器项目值
【发布时间】:2015-03-16 21:24:40
【问题描述】:

所以我有这个微调器,我想在其中找到所选项目是什么。我准备了一些东西来记住选择的项目。现在有一个按钮可以在微调器所在的相同布局中单击,这将弹出一个对话框,告诉您选择了哪个项目。但我收到错误,在我的日志猫上显示“java.lang.NullPointerException”

这是我的对话框的 XML 文件;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffc0c0c0">

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Saving&apos;s Account"
            android:id="@+id/spinnerSelectedText"
            android:textColor="#ff000000"
            android:drawableLeft="@drawable/transferaccount_icon"
            android:drawablePadding="10dp"
            android:paddingLeft="10dp"
            android:layout_marginTop="10dp"
            android:textSize="16sp" />


</RelativeLayout>

这是我用于对话框的 java 文件;

public class examplefile extends DialogFragment {

public Dialog onCreateDialog(Bundle savedInstanceState) {

    final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inf = getActivity().getLayoutInflater();
    View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null);
    builder.setView(theDIalog);

    builder.setCancelable(true);

return dialog;

}

}

现在这是您开始时看到的屏幕 - 在主要活动课程之后,但我不想分享主要活动的代码,因为我认为没有必要;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View v = inflater.inflate(R.layout.makea_transfer, container, false);


    spinner = (Spinner)v.findViewById(R.id.spinnermakeatransfer);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.accounts,R.layout.spinner_item);
    adapter.setDropDownViewResource(R.layout.spinner_dropdown_items);
    spinner.setAdapter(adapter);
    spinner.setPrompt("Select an item");



Spinner spinner1 = (Spinner)v.findViewById(R.id.spinnermakeatransfer);
    String spinnerSelectedItem = spinner1.getSelectedItem().toString();


    TextView spinnerText = (TextView) v.findViewById(R.id.spinnerSelectedText);
    spinnerText.setText(spinnerSelectedItem);

return v;

}

现在这是 makea_transfer XML ;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

<Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/spinnermakeatransfer"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:paddingTop="5dp"
            android:spinnerMode="dialog"
            android:layout_marginTop="5dp"
            android:touchscreenBlocksFocus="false" />

</RelativeLayout>

请有人帮我解决这个问题,如果您不理解或需要我提供更多详细信息,请发表评论。

这是原木猫 Click Here

【问题讨论】:

    标签: java android xml android-spinner


    【解决方案1】:

    这里:

    TextView spinnerText = (TextView) v.findViewById(R.id.spinnerSelectedText);
    

    spinnerSelectedTextmakea_transfer_confirm 布局内,但试图从 makea_transfer 获取:

    examplefileDialogFragment的onCreateDialog方法中获取TextView:

    View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null);
    builder.setView(theDIalog);
    // get TextView here
     TextView spinnerText = (TextView) theDIalog.findViewById(R.id.spinnerSelectedText);
    

    为了在 spinnerText 中显示 spinnerSelectedItem 值,使用 setArguments 使用 examplefile 类传递它:

    v.findViewById(R.id.maketransferReviewButton).setOnClickListener(
                                                    new View.OnClickListener() { 
    @Override public void onClick(View v) { 
      SampleDialog fragment = new examplefile(); 
      Bundle args = new Bundle();
      args.putString("spinnerText", spinner1.getSelectedItem().toString());
      fragment.setArguments(args);
      examplefile.show(getFragmentManager(), "make a transfer dialog"); 
     } 
    
    });
    

    在 onCreateDialog 中使用 getArguments 获取字符串:

    String strSelectedValueFromSpinner = getArguments().getString("spinnerText");
    View theDIalog = inf.inflate(R.layout.makea_transfer_confirm, null);
    builder.setView(theDIalog);
    // get TextView here
    TextView spinnerText = (TextView) theDIalog.findViewById(R.id.spinnerSelectedText);
    spinnerText.setText(strSelectedValueFromSpinner);
    

    【讨论】:

    • 是的,你是对的,所以在示例文件 j​​ava 中,我如何能够更改该文本并将其替换为微调器值?
    • @user3511639:查看我的编辑答案。如果还有问题请告诉我
    • 想你在我发送评论的时候把它改了,所以我会快速阅读你输入的内容。
    • 我并没有完全按照你在构造函数部分所说的话,我是否将该代码放在 examplefile 中。 java 还是在其他 java 文件中?
    • @user3511639:是的,将其添加到 examplefile 中。爪哇
    【解决方案2】:

    你需要这样做

     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    
                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    
                    String spinnerSelectedItem = spinner.getSelectedItem().toString();
                    Log.i("Selected item : ", items);
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
    
                }
    
            });
    

    然后删除

    Spinner spinner1 = (Spinner)v.findViewById(R.id.spinnermakeatransfer);
    

    【讨论】:

    • 是的,它会打印出我在控制台上选择的项目。但我希望在我拥有的这个对话框中打印该文本
    • @user3511639 您只需将微调器文本项传递到警报对话框的构造函数中,并使用 setText 设置文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多