片段中的微调器

时间:2018-01-02 03:57:54

标签: android android-fragments android-spinner

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

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();
        }
    };
}

3 个答案:

答案 0 :(得分:2)

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

@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;

}

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

答案 1 :(得分:0)

  

在片段中尝试设置和使用微调器

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;
    }
  

初始化微调器和设置适配器的方法

    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 //您的微调器项目布局

<?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 //把它放在你的主要布局

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

        </Spinner>

答案 2 :(得分:0)

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

这是Fragment的Java文件的代码:

公共类MainFragment扩展了Fragment {

// 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;
}
}

用于片段的布局文件的代码是:

 <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>

现在将片段附加到活动,代码如下:

公共类MainActivity扩展了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>

将微调器项目添加到 Fragment Activity 之间的唯一区别在于:

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

在活动中,您必须将 getContext()替换为 ActivityName.this 。其余代码将是相同的。

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