2016-03-01 34 views
4

問題 我正在使用Retrofit從MySQL中獲取某些產品類別。數據即將發佈並在微調器中分配,但是當我選擇一個不顯示的項目時。在下拉菜單中分配項目並且setOnItemSelected偵聽器也在工作。但是選定的項目並未顯示在微調器中。 我已經嘗試幾乎所有相關的計算器問題,但不工作。請幫助我。提前致謝。Android-數據分配在微調框中,但選中時未顯示微調框中的值

代碼

這是OrderActivity

public class OrderActivity extends AppCompatActivity { 

Spinner sp_category,sp_product; 
public static final String ROOT_URL = "http://10.0.2.2/sizzle/"; 
private List<Product> books; 
List<String> prod_cat = new ArrayList<String>(); 
ArrayAdapter<String> adapter_prod_cat; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_order); 

    //sp_product = (Spinner)findViewById(R.id.spinner_product); 
    getBooks(); 
    sp_category = (Spinner)findViewById(R.id.spinner_category); 
    sp_category.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      String category = parent.getSelectedItem().toString(); 
      Toast.makeText(getApplicationContext(),category,Toast.LENGTH_LONG).show(); 
     } 

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

     } 
    }); 
} 


private void getBooks(){ 
    final ProgressDialog loading = ProgressDialog.show(this, "Fetching Data", "Please wait...", false, false); 

    RestAdapter adapter = new RestAdapter.Builder() 
      .setEndpoint(ROOT_URL) 
      .build(); 

    ProductAPI api = adapter.create(ProductAPI.class); 

    api.getProduct(new Callback<List<Product>>() { 
     @Override 
     public void success(List<Product> list, Response response) { 
//Dismissing the loading progressbar 
      loading.dismiss(); 
      books = list; 
      for (int i = 0; i < books.size(); i++) { 
       prod_cat.add(books.get(i).getProductCategory()); 
       System.out.println("added"); 
      } 
      Set<String> citySet = new HashSet<String>(prod_cat); 
      prod_cat.clear(); 
      prod_cat.addAll(citySet); 
      prod_cat.add("Select Category"); 
      showListinSpinner(); 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

private void showListinSpinner(){ 
    //String array to store all the book names 
    String[] items = new String[prod_cat.size()]; 

    //Traversing through the whole list to get all the names 
    for(int i=0; i<prod_cat.size(); i++){ 
     //Storing names to string array 
     items[i] = prod_cat.get(i); 
    } 

    //Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<String> adapter; 
    adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, items); 
    //setting adapter to spinner 
    adapter.notifyDataSetChanged(); 
    sp_category.setAdapter(adapter); 
    //Creating an array adapter for list view 
} 

}

這是佈局文件

<?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.skipper.ash.ashtet.OrderActivity"> 
<Spinner 
    android:layout_width="300dp" 
    android:layout_height="80dp" 
    android:id="@+id/spinner_category" 
    android:spinnerMode="dropdown" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="43dp" 
    android:textAlignment="center" 
    android:visibility="visible" /> 
</RelativeLayout> 
+0

讓我知道,如果它顯示正確的吐司,當你從微調選擇項目。 – ELITE

+0

是的它顯示吐司。但價值不是設置在微調 –

+0

試試下面的答案..hope它會工作。 – ELITE

回答

1

創建佈局folde xml文件[R命名爲item_spinner,寫在下面,同時創造適配器它

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="15sp" 
    android:textColor="#000000" > 

,並在您的代碼更改代碼。

adapter = new ArrayAdapter<String>(getApplicationContext(), 
         R.layout.item_spinner, items); 

也改變了語句的順序

sp_category.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

第一套適配器微調器,然後發射數據集更改事件。

希望它能幫助你。

編輯

我觀察到很多的時間,如果我們的適配器設置爲ListViewSpinner編程方式使用ArrayAdapter,並使用android.R.layout.simple_spinner_item_1或任何其他構建佈局,然後設置項目的文本顏色白色。我沒有明白它爲什麼默認將白色設置爲文本。

+0

非常感謝兄弟。它像一個魅力。 但我不明白這個解決方案。 你能解釋一下嗎? –

+0

我編輯了答案並添加了解釋.. – ELITE

相關問題