2016-03-01 74 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

相关问题