2014-11-03 40 views
0

我已經寫了一個程序,顯示一個微調,但我想在同一個活動內顯示一個列表視圖,當我選擇任何項目的微調,我也寫了自定義適配器的代碼顯示列表視圖中的項目和列表視圖row有6個textviews,其中的所有數據來自strings.xml文件中定義的String-array,所以需要一些幫助如何在使用onitemselected偵聽器單擊微調項目時顯示listview?

Result_Date.java其中有一個微調框和資源,不知道在「onitemselected」方法內部調用什麼

public class Result_Date extends Activity { 

ImageView iv; 
String[] years = { "Select year", "2000", "2001", "2002", "2003", "2004", 
     "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", 
     "2013", "2014" }; 
ArrayAdapter<String> adapter; 
ListView lv; 
String[] name; 
String[] mobile; 
String[] gender; 
String[] age; 
String[] disease; 
String[] day; 
String[] month; 
String[] year; 

int[] images = { R.drawable.photo_bg, R.drawable.photo_bg, 
     R.drawable.photo_bg, R.drawable.photo_bg, R.drawable.photo_bg, 
     R.drawable.photo_bg, R.drawable.photo_bg, R.drawable.photo_bg }; 

Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.result_list_year); 
    spinner = (Spinner) findViewById(R.id.btnShowYear); 
    iv = (ImageView) findViewById(R.id.imgBackReuslt); 
    adapter = new ArrayAdapter<String>(getBaseContext(), 
      R.layout.spinner_item, R.id.textView1, years) { 
     @Override 
     //this method is used to hide the default text "Select Year" which repeats twice 
     public View getDropDownView(int position, View convertView, 
       ViewGroup parent) { 

      View v = null; 

      if (position == 0) { 
       TextView tv = new TextView(getContext()); 
       tv.setHeight(0); 
       tv.setVisibility(View.GONE); 
       v = tv; 
      } else { 

       v = super.getDropDownView(position, null, parent); 
      } 

      parent.setVerticalScrollBarEnabled(false); 
      return v; 
     } 
    }; 

    adapter.setDropDownViewResource(R.layout.spinner_item); 
    spinner.setAdapter(adapter); 

    Resources res = getResources(); 
    name = res.getStringArray(R.array.Name); 
    mobile = res.getStringArray(R.array.Mobile); 
    gender = res.getStringArray(R.array.Gender); 
    age = res.getStringArray(R.array.Age); 
    disease = res.getStringArray(R.array.DiagnosisName); 
    day = res.getStringArray(R.array.day_array); 
    month = res.getStringArray(R.array.month_year); 
    year = res.getStringArray(R.array.year_array); 

    lv = (ListView) findViewById(R.id.lstShowYear); 
    MyAdapter adapter = new MyAdapter(getBaseContext(), name, mobile, 
      gender, age, images, day, month, year, disease); 
    lv.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     } 
    }); 
} 

public void onClick(View v) { 
    super.onBackPressed(); 
    finish(); 
} 

我CustomAdapter MyAdapter.java

public class MyAdapter extends ArrayAdapter<String> { 

Context context; 
int[] images; 
String[] namearray; 
String[] mobilearray; 
String[] genderarray; 
String[] agearray; 
String[] diseasearray; 
String[] dayarray; 
String[] montharray; 
String[] yeararray; 

public MyAdapter(Context c, String[] name, String[] mobile, 
     String[] gender, String[] age, int[] img, String[] disease, 
     String[] day, String[] month, String[] year) { 
    super(c, R.layout.row_layout, R.id.textView1, name); 
    // TODO Auto-generated constructor stub 
    this.context = c; 
    this.namearray = name; 
    this.mobilearray = mobile; 
    this.genderarray = gender; 
    this.agearray = age; 
    this.diseasearray = disease; 
    this.dayarray = day; 
    this.montharray = month; 
    this.yeararray = year; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ListView lv; 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View row = inflater.inflate(R.layout.row_layout, parent, false); 
    ImageView image = (ImageView) row.findViewById(R.id.imgView); 
    TextView text1 = (TextView) row.findViewById(R.id.txtName); 
    TextView text2 = (TextView) row.findViewById(R.id.txtMobile); 
    TextView text3 = (TextView) row.findViewById(R.id.txtGender); 
    TextView text4 = (TextView) row.findViewById(R.id.txtAge); 
    TextView text5 = (TextView) row.findViewById(R.id.txtDesease); 
    TextView text6 = (TextView) row.findViewById(R.id.txtDate); 
    lv = (ListView) row.findViewById(R.id.listView1); 

    image.setImageResource(images[position]); 
    text1.setText(namearray[position]); 
    text2.setText(mobilearray[position]); 
    text3.setText(genderarray[position]); 
    text4.setText(agearray[position]); 
    text5.setText(diseasearray[position]); 
    text6.setText(dayarray[position]); 
    text6.setText(montharray[position]); 
    text6.setText(yeararray[position]); 

    return row; 
} 

}

我是否需要寫自定義資源的obj直到設置onitemselected方法裏面的適配器的代碼? 任何建議,歡迎

回答

0

我會做以下事情:

創建我ListAdapter命名,例如「refreshList」,可以採取作爲參數從選定的微調的項目,你需要的數據「裏面的方法獲取「所需的數據,以便通過選定微調器的值填寫列表。例如,如果是更改列表是當年數據的功能可能是這樣的:

public void refreshList(String year) { 
    //Fill the arrays with the data according to the year 
    namearray = getResources().getStringArray(R.array.Name); 
    //Do loas all the data you need according to the year here 
    //And the refresh the adapter 
    this.notifyDataSetChanged(); 
} 

然後在您的通話微調像adapter.refreshList(years[position])或類似的東西的ListAdapter的該函數的調用onItemSelected。這只是一個想法,有很多方法可以做到這一點,重要的是在適配器中有一個名爲notifyDataSetChanged()的函數,該函數將當前位於適配器內部處理的數據列表/數據中的數據再次加載到列表中。如果微調器選定的值將更改列表數據,那麼當選擇微調器值時,應該使用它來刷新列表。希望它有幫助

+0

先生我試過以上,但我得到空指針異常,存儲== null – 2014-11-04 07:06:36

+0

上面只是一個想法,重點是你刷新適配器在微調項目更改事件。你的意思是「存儲== null」?你能告訴我新的代碼嗎? – labreu 2014-11-04 11:54:51

+0

public void refreshList(String years){ name = getResources()。getStringArray(R.array.Name); mobile = getResources()。getStringArray(R.array.Mobile); gender = getResources()。getStringArray(R.array.Gender); age = getResources()。getStringArray(R.array.Age); disease = getResources()。getStringArray(R.array.DiagnosisName); year = getResources()。getStringArray(R.array.year_array); this.notifyDataSetChanged(); } }我把它從我的onitemselected方法調用adapter.refreshList(年[位置]) 我知道我做錯了那就是爲什麼錯誤,請指導我 – 2014-11-04 13:03:37

相關問題