2016-10-01 4 views
1

My appは、配列内の文字列の数に基づいてリストアイテムを作成するListViewを作成します。しかし、私は各Spinner項目に適切な項目を選択させたいと思います。CustomAdapter(extends BaseAdapter)によって作成されたスピナーのテキストを変更する

例:String[] items = {"item1", "item2", "item3"}

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

    String[] items = {"item1", "item2", "item3"} 

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    ListView listView = (ListView) findViewById(R.id.requestItems_listView); 
    listView.setAdapter(new CustomAdapter(this)); 
} 

    private class CustomAdapter extends BaseAdapter { 
     LayoutInflater inflater; 

     public CustomAdapter(Context context) { 
      inflater = LayoutInflater.from(context); 
     } 

     public int getCount() { 
      // TODO Auto-generated method stub 
      return items.length; 
     } 

     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     public View getView(int arg0, View convertview, ViewGroup arg2) { 
      ViewHolder viewHolder; 
      if (convertview == null) { 
       convertview = inflater.inflate(R.layout.request_item_list_item, null); 
       viewHolder = new ViewHolder(); 
       viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner); 
       viewHolder.spinner.setAdapter(adapter); 
       convertview.setTag(viewHolder); 
      } else { 
       viewHolder = (ViewHolder) convertview.getTag(); 
      } 
      return convertview; 
     } 

     public class ViewHolder { 
      Spinner spinner; 
     } 
    } 
} 

は、これはリストビュー内の "request_item_list_item" 項目(文字列[] "の項目" の3つの項目があるため)3を作成すべきです。

そして、それはそう位置0における各スピナー(request_item_list_item 1部)を有する:

"ITEM1"

"ITEM1"

"ITEM1"

を私はそれを希望ただし、次の操作を実行してください:

「item1」

"ITEM2"

は "ITEM3は"

これはCustomAdapterで達成されますか?

ボーナス質問: ユーザーが「追加ボタン」を押してリストアイテムの数を1増やすことができるようにしたい場合(つまり、4つのrequest_item_list_items、5,6などが存在するように) .addメソッドを使用する必要がありますか?または単にgetCountを変更してリストをリフレッシュするだけですか(これは理想的ではありません...ユーザーがrequest_item_list_itemsの情報をすでに入力していた場合、リフレッシュ時にすべての入力が失われます)。あなたはこのようなgetViewを変更する必要がある最初の質問については

+0

viewHolder.spinner.setSelection(arg0に、追加してください)、 "return convertview"の前。 –

+0

このようなカスタムアダプタとアクティビティを作成すると、役立つかもしれません。http://abhiandroid.com/ui/custom-spinner-examples.html –

答えて

1

:(I_A_Mokがコメントしたように)

public View getView(int arg0, View convertview, ViewGroup arg2) { 
    ViewHolder viewHolder; 
    if (convertview == null) { 
     convertview = inflater.inflate(R.layout.request_item_list_item, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner); 
     viewHolder.spinner.setAdapter(adapter); 
     convertview.setTag(viewHolder); 
     viewHolder.spinner.setSelection(arg0); 
    } else { 
     viewHolder = (ViewHolder) convertview.getTag(); 
    } 
    return convertview; 
} 

と2番目の質問のために:

CustomAdapter myAdapter; 
ArrayList<String> items; 

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

    items = new ArrayList<>(); 
    items.add("item1"); 
    items.add("item2"); 
    items.add("item3"); 

    ListView listView = (ListView) findViewById(R.id.requestItems_listView); 
    myAdapter = new CustomAdapter(this, items); 
    listView.setAdapter(myAdapter); 

    Button bt_add_new = (Button)findViewById(R.id.bt_add_new); 
    bt_add_new.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      items.add("item" + items.size() + 1); 
      myAdapter.setItems(items); 
      myAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

private class CustomAdapter extends BaseAdapter { 
    LayoutInflater inflater; 

    private ArrayList<String> items; 

    public CustomAdapter(Context context, ArrayList<String> items) { 
     inflater = LayoutInflater.from(context); 
     this.items = items; 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return items.size(); 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public View getView(int arg0, View convertview, ViewGroup arg2) { 
     ViewHolder viewHolder; 

     convertview = inflater.inflate(R.layout.request_item_list_item, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.spinner = (Spinner) convertview.findViewById(R.id.itemSpinner); 

     ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, items); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     viewHolder.spinner.setAdapter(adapter); 
     convertview.setTag(viewHolder); 

     return convertview; 
    } 

    public ArrayList<String> getItems() { 
     return items; 
    } 

    public void setItems(ArrayList<String> items) { 
     this.items = items; 
    } 

    public class ViewHolder { 
     Spinner spinner; 
    } 
} 
関連する問題