【问题标题】:spinner in a fragment片段中的微调器
【发布时间】:2018-01-02 12:39:31
【问题描述】:

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

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

【问题讨论】:

标签: android android-fragments android-spinner


【解决方案1】:

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

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

}

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

【讨论】:

  • 在活动中使用复选框时是否在片段中使用相同的代码?
【解决方案2】:

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

这是 Fragment 的 Java 文件的代码:

公共类 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;
}
}

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

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

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

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

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

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

【讨论】:

    【解决方案3】:

    在你的片段中尝试这个来设置和使用微调器

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多