LoginSignup
5
5

More than 5 years have passed since last update.

RubyMotion for AndroidでlistLiewを使ってみる

Last updated at Posted at 2014-09-23

listViewを使ってみたのでただのメモ。

ArrayAdapterを使った場合

ただArrayAdapterを使うだけだとつまらないので、
ArrayAdapterを継承した HelloArrayAdapterを使う

main_activity.rb
class MainActivity < Android::App::Activity
  Members = ['Kanako', 'Ayaka', 'Shiori', 'Momoka', 'Reni']

  def onCreate(savedInstanceState)
    super

    list = Android::Widget::ListView.new(self)
    list.adapter = HelloArrayAdapter.new(self, Android::R::Layout::Simple_list_item_1, Members)

    layout = Android::Widget::LinearLayout.new(self)
    layout.addView(list, Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::MATCH_PARENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))

    self.contentView = layout
  end
end

hello_array_adapter.rb
class HelloArrayAdapter < Android::Widget::ArrayAdapter
  def getView(position, convertView, parent)
    textView = Android::Widget::TextView.new(context)
    textView.text = self.getItem(position)

    layout = Android::Widget::LinearLayout.new(context)
    layout.addView(textView, Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::MATCH_PARENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))

    layout
  end
end

BaseAdapterを使った場合

ArrayAdapterじゃなくて、BaseAdapterを継承してAdapterを使うことが多いので、こちらも使ってみる
ItemClickListenerとかも設定してみた。

main_activity.rb
class MainActivity < Android::App::Activity
  def onCreate(savedInstanceState)
    super
    listView = Android::Widget::ListView.new(self)
    listView.adapter = HelloListAdapter.new
    listView.onItemClickListener = self
    listView.choiceMode = Android::Widget::AbsListView::CHOICE_MODE_SINGLE

    textView = Android::Widget::TextView.new(self)
    textView.text = "Momoiro Clover Z"

    layout = Android::Widget::LinearLayout.new(self)
    layout.orientation = Android::Widget::LinearLayout::VERTICAL
    layout.addView(textView, Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::MATCH_PARENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))
    layout.addView(listView, Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::MATCH_PARENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))

    self.contentView = layout    
  end

  def onItemClick(parent, view, position, id)
    p position
  end
end
hello_list_adapter.rb
class HelloListAdapter < Android::Widget::BaseAdapter 
  Data = ["Kanako", "Aayaka", "Shiori", "Momoka", "Reni"]

  def getCount()
    Data.size
  end

  def getItem(position)
    Data[position]
  end

  def getItemId(position)
    position
  end

  def getView(position, convertView, parent)
    context = parent.context
    if convertView.nil?
      textView1 = Android::Widget::TextView.new(context)
      textView1.text = (position + 1).to_s

      textView2 = Android::Widget::TextView.new(context)
      textView2.text = getItem(position)

      layout = Android::Widget::LinearLayout.new(context)
      layout.orientation = Android::Widget::LinearLayout::HORIZONTAL
      layout.addView(textView1,  Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::WRAP_CONTENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))
      layout.addView(textView2,  Android::Widget::LinearLayout::LayoutParams.new(Android::View::ViewGroup::LayoutParams::MATCH_PARENT, Android::View::ViewGroup::LayoutParams::WRAP_CONTENT))
      layout
    else
      convertView
    end
  end
end

このぐらいサクッとかけるかなと思ったけど、慣れてないので意外と時間かかりました。
特に、addViewのLayoutParamsとかちょっと間違えても、気がつかなかったりするので、ハマったりします。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5