片段中的微调器

spinner in a fragment

我可以在片段中使用微调器吗?我想在 activity 的片段之一中使用微调器来设置倒数计时器的时间。我看过的所有教程和视频都使用 activity 而不是片段,我不确定在片段中制作微调器的方法是否相同。

package com.softeng.applockerproject;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.concurrent.TimeUnit;



public class page2 extends Fragment {
    private static final String TAG =   "page2";

    private Button btntest;
    private TextView timer;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.page2_fragment,container,false);

        btntest = (Button) view.findViewById(R.id.button2);
        timer = (TextView) view.findViewById(R.id.Timer);
        btntest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                countDownTimer.start();
            }
        });

        return view;
    }

    //timer part
    private CountDownTimer countDownTimer = new CountDownTimer(7200000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            long millis= millisUntilFinished;
            String hms= String.format("%02d:%02d",

                    TimeUnit.MILLISECONDS.toHours(millis),
                    TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))
                    //TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
            );
            timer.setText(hms);
        }

        @Override
        public void onFinish() {
            Toast.makeText(getActivity(), "timer stopped",Toast.LENGTH_SHORT).show();
        }
    };
}

以下是如何在片段中设置微调器:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.manual, container, false);

    String [] values = 
        {"Time at Residence","Under 6 months","6-12 months","1-2 years","2-4 years","4-8 years","8-15 years","Over 15 years",};
    Spinner spinner = (Spinner) v.findViewById(R.id.spinner1);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, values);
    adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(adapter);

    return v;

}

将布局文件替换为您正在使用的布局文件,祝您好运:)

Try this in your fragment to set and use spinner

public class ExamsFragment extends Fragment {
        private static final String[] spinner_data= {"Term I", "Term II", "Term III"};
        View view;
    Spinner mySpinner;

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_layout, container, false);
        setSpinnerData();
        mySpinner.setEnabled(true);
        //Setting the  UI.
            return view;
    }

method to initialize spinner and set adapter

    private void setSpinnerData() {
        mySpinner= (Spinner) getActivity().findViewById(R.id.spinner_sp);
        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.spinner_item_layout, testTypes);

        mySpinner.setAdapter(spinnerAdapter);
    }

spinner_item_layout.xml //your spinner item layout

<?xml version="1.0" encoding="utf-8"?>    
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/white"
    android:gravity="start"
    android:paddingLeft="@dimen/padding_10"
    android:paddingRight="@dimen/padding_10"
    android:paddingTop="@dimen/padding_3"
    android:paddingBottom="@dimen/padding_3"
    android:background="@color/colorPrimary"
    android:textSize="16sp"/>

fragment_layout.xml // put this in your main layout

 <Spinner
            android:id="@+id/spinner_sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textStyle="bold">

        </Spinner>

在添加组件方面,FragmentsActivities 的行为方式相似。 Fragments 可以被认为是具有自己的生命周期方法的迷你活动,以及一些额外的方法,如 onCreateView()onDestroyView()。您可以通过以下方式向片段添加微调器:

这是 Fragment 的 Java 文件的代码:

public class MainFragment 扩展片段 {

// Default Constructor to instantiate a Fragment object
public MainFragment(){

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.main_fragment,container,false);

    Spinner spinner = (Spinner) view.findViewById(R.id.spinner);

    // Creating an Array Adapter to populate the spinner with the data in the string resources
    ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(getContext(),R.array.spinner_choices
                                                ,android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner.setAdapter(spinnerAdapter);

    return view;
}
}

用于 Fragment 的布局文件的代码是:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"/>

</LinearLayout>

现在将片段附加到 activity 代码如下:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MainFragment fragment = new MainFragment();
    FragmentManager manager = getSupportFragmentManager();

    manager.beginTransaction().add(R.id.fragment_container,fragment).commit();
}
}

用于为 ArrayAdapter 提供数据的字符串资源在 strings.xml 文件中。具体如下:

<string-array name="spinner_choices">
    <item>Deafult Choice</item>
    <item>Choice 1</item>
    <item>Choice 2</item>
    <item>Choice 3</item>
    <item>Choice 4</item>
    <item>Choice 5</item>
</string-array>

FragmentActivity 添加微调项的唯一区别在于:

ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(getContext(),R.array.spinner_choices
                                     ,android.R.layout.simple_spinner_item);

在 Activity 中,您必须将 getContext() 替换为 thisActivityName.this。其余代码将相同。

注意:您应该在 onCreateView() 方法中编写从 Fragment 布局文件中获取 Spinner 的代码,因为它是在 Parent Activity 之前调用的s onCreate() 方法以确保在片段附加到父级之前创建所有视图 activity.