2016-03-02 104 views
0

我正在嘗試創建一個具有2個微調器的應用程序。第一個微調將有1,2,3的選擇。如果第一個微調器的選定值是1,那麼第二微調器將具有a,b,c的值。如果第一個微調器的選定值是2,那麼第二個將有d,e,f。如果1st = 3,那麼2nd = g,h,i。我已經使用此代碼創建這樣的:Android微調器和片段

String[] categoryValues = new String[] { "1", "2", "3"}; 
String[] endurance = new String[] { "a", "b", "c"}; 
String[] strength = new String[] { "d", "e", "f"}; 
String[] balance = new String[] { "g", "h", "i"}; 

Spinner exercise = (Spinner)findViewById(R.id.exerciseS); 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int  position, long id) { 
    final ArrayList<String> list = new ArrayList<String>(); 

    if(position == 0){ 
     for (int i = 0; i < endurance.length; ++i) { 
      list.add(endurance[i]); 
     } 
     ArrayAdapter<String> adapterFT = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list); 
     exercise.setAdapter(adapterFT); 
     adapterFT.notifyDataSetChanged(); 
    } 
    else if(position == 1){ 
     for (int i = 0; i < strength.length; ++i) { 
      list.add(strength[i]); 
     } 
     ArrayAdapter<String> adapterDST = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list); 
     exercise.setAdapter(adapterDST); 
     adapterDST.notifyDataSetChanged(); 
    } 
    else if(position == 2){ 
     for (int i = 0; i < balance.length; ++i) { 
      list.add(balance[i]); 
     } 
     ArrayAdapter<String> adapterDST = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list); 
     exercise.setAdapter(adapterDST); 
     adapterDST.notifyDataSetChanged(); 
    } 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 

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

    Spinner category = (Spinner)findViewById(R.id.categoryS); 

    final ArrayList<String> list = new ArrayList<String>(); 
    for (int i = 0; i < categoryValues.length; ++i) { 
     list.add(categoryValues[i]); 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, list); 
    category.setAdapter(adapter); 
    category.setOnItemSelectedListener(this); 


} 

我遇到的問題是,如何獲取第二微調更改,恕不任何按鈕片段的價值(不點擊任何按鈕)? layout image here

1微調=類別
第二微調] =運動

回答

0

你爲什麼不這樣做的一樣,在第一次微調,並添加一個onItemSelected監聽器?在該監聽器上,您可以根據用戶選擇的內容創建或更新片段。

+0

我是否需要創建另一個onItemSelected偵聽器? – newToAndroid

+1

您可以創建一個新的,或使用現有的並基於視圖進行區分。但我覺得有一個單獨的聽衆是更清潔的。 – Francesc

+0

你能告訴我應該如何創建另一個? – newToAndroid

0

試試這個。
在第一微調OnItemSelected()調用的方法,並從第一微調該方法通過選擇項目只是加載第二,適當的項目,並調用的setSelected如果u想在第二微調來選擇特定的值

0

我不知道如果我很好地理解你的問題,但這是我所做的。我重新創建瞭解決方案。檢查它是否符合您的需求。你可以問問是否需要調整。

strings.xml,我創建這些字符串數組

第一陣列串

<string-array name="first_spinner"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
</string-array> 

第二陣列串

<string-array name="second_spinner"> 
    <item>a,b,c</item> 
    <item>d,e,f</item> 
    <item>g,h,i</item> 
</string-array> 

我在佈局文件中添加了兩個微調部件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.inducesmile.myapplication4.MainActivity"> 


<Spinner 
    android:id="@+id/first_spinner" 
    android:layout_width="match_parent" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="4dp" 
    android:layout_height="wrap_content"> 
</Spinner> 


<Spinner 
    android:id="@+id/second_spinner" 
    android:layout_width="match_parent" 
    android:layout_centerHorizontal="true" 
    android:layout_below="@+id/first_spinner" 
    android:layout_marginTop="24dp" 
    android:layout_height="wrap_content"> 
</Spinner> 

</RelativeLayout> 

在Activity頁面中,我使用了這段代碼。我使用的存儲陣列以獲得在微調B中選擇的內容,如圖

import android.os.Bundle; 
import android.support.v4.app.FragmentManager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

private Spinner firstSpinner; 
private Spinner secondSpinner; 

private FragmentManager fragmentManager; 

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

    fragmentManager = getSupportFragmentManager(); 

    firstSpinner = (Spinner)findViewById(R.id.first_spinner); 
    ArrayAdapter<CharSequence> firstAdapter = ArrayAdapter.createFromResource(this, R.array.first_spinner, android.R.layout.simple_spinner_item); 
    firstAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    firstSpinner.setAdapter(firstAdapter); 

    secondSpinner = (Spinner)findViewById(R.id.second_spinner); 
    ArrayAdapter<CharSequence> secondAdapter = ArrayAdapter.createFromResource(this, R.array.second_spinner, android.R.layout.simple_spinner_item); 
    secondAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    secondSpinner.setAdapter(secondAdapter); 

    firstSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      secondSpinner.setSelection(position); 

      String[] secondSpinnerContent = getResources().getStringArray(R.array.second_spinner); 
      Toast.makeText(MainActivity.this, "Value " + secondSpinnerContent[position], Toast.LENGTH_LONG).show(); 

      switch(position){ 
       case 0: 
        DefaultFragment firstFragment = new DefaultFragment(); 
        fragmentManager.beginTransaction().replace(R.id.first_container, firstFragment).commit(); 
        break; 
       case 1: 
        DefaultFragment secondFragment = new DefaultFragment(); 
        fragmentManager.beginTransaction().replace(R.id.first_container, secondFragment).commit(); 
        break; 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
    } 
} 

讓我知道,如果你有問題。

+0

第二個微調器上的選項取決於在第一個微調器上選擇的值。片段的內容依賴於第二個微調器。你的只是改變片段。我的只改變了第二個微調值。我想在更改微調框時更改片段內容。你有沒有檢查過我包括的佈局?這可能有助於理解這個問題。 – newToAndroid

+0

那麼,我給你一個指向你的問題的指針,但似乎我不明白你需要什麼。根據你的例子,微調器a和b中的映射是線性的,例如1 = a,b,c。如果它是這樣的,那麼它們具有相同的索引。您可以使用微調器a中的位置訪問b中的數組內容。可能是你不明白我的解決方案。 – Inducesmile