コード ```Android Studio で、言語はKotlinを使用して開発をしています。 Listviewに配置したswitchの動きがリスナーでとれないので困っています。 気づいたことなどありましたら、教えて頂けると幸いです。 NavigationDrawer の Navigationview に入れ子にしたListviewがあり、そこにswitchを設置したのですが、 項目をクリックした時に期待通り動いてくれません。 現状では以下のコードでアプリが起動直後に落ちる結果になります。 期待値としては、LIstviewのswitchをタップ(切り替え)すると、ONとOFFそれぞれでトーストを表示したいです。 元々、navigationViewを表示するのにハンバーガメニューなど使用せず。複数のボタン押下で左から表示されるという動きを 期待していて、可能であれば、一つのnavigationviewで、以下の様な menu レイアウトを切り替えるという事がしたいです。 app:menu="@menu/navigation_drawer" しかしこの方法も見つかっていないので、もしご存知の方がいらっしゃいましたら教えて頂けると幸いです。 navigationviewnのレイアウトです。
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:layout_marginTop="30dp"
app:headerLayout="@layout/nav_header_main"
android:fitsSystemWindows="false"
android:visibility="invisible"
app:itemTextColor="#FEFEFE">
<ListView android:id="@+id/nav_menu_items_switch" android:divider="@null" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="0dp" android:layout_marginTop="20dp"/> </android.support.design.widget.NavigationView>
<?xml version="1.0" encoding="utf-8"?>` }'````````` これがListの1行レイアウトです。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image"
android:layout_width="54dp"
android:layout_height="50dp"/>
<TextView
android:text="TextView"
android:layout_width="161dp"
android:layout_height="46dp"
android:id="@+id/title"
android:layout_weight="1"/>
<Switch
android:text="Switch"
android:layout_width="164dp"
android:layout_height="53dp"
android:id="@+id/switch_1"
android:layout_weight="1"
android:checked="true"
android:focusable="false"
android:layout_marginRight="30dp"/>
</LinearLayout>
ここがlistを表示するActivityの 全文です。 本来setOnItemClickListener にタップされた時の動きをかくと思うのですが、switchだとadapterに書いている記事を見かけたので、同じくそちらに書いているのですが間違えているでしょうか。 ```ここに言語を入力 class Webview_indexActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_webview_index) val switch = Switch(this) switch.setOnCheckedChangeListener({ button, isChecked -> val text = if (isChecked) "checked" else "unchecked" Toast.makeText(this, text, Toast.LENGTH_LONG).show() }) //val switchmenu = nav_view.menu.findItem(R.id.navigation_notifications) // // switchmenu.actionView = switch mutableListOf<MenuItem>() val menuItem_right = mutableListOf<MenuItem>() menuItem_right.add(MenuItem("設定",R.drawable.button_category_clothes_icon)) menuItem_right.add(MenuItem("設定",R.drawable.button_category_food_icon)) menuItem_right.add(MenuItem("設定",R.drawable.button_category_hobby_icon)) nav_menu_items.adapter = MenuItemAdapter(this,menuItem_right) nav_menu_items.setOnItemClickListener {parent, view, position, id -> Toast.makeText(this, "Clicked: ${id}", Toast.LENGTH_SHORT).show() drawer_layout.closeDrawer(Gravity.LEFT) drawer_layout.closeDrawer(Gravity.RIGHT) } //左側の switchのlistの設定 mutableListOf<MenuItem_switch>() val menuItem_left_switch = mutableListOf<MenuItem_switch>() menuItem_left_switch.add(MenuItem_switch("設定",switch)) menuItem_left_switch.add(MenuItem_switch("設定",switch)) menuItem_left_switch.add(MenuItem_switch("設定",switch)) nav_menu_items_switch.setOnItemClickListener { parent, view, position, id -> drawer_layout.closeDrawer(Gravity.LEFT) drawer_layout.closeDrawer(Gravity.RIGHT) } //左側の通常のlistの設定 mutableListOf<MenuItem_normal>() val menuItem_left_normal = mutableListOf<MenuItem_normal>() menuItem_left_normal.add(MenuItem_normal("設定",R.drawable.button_category_clothes_icon)) menuItem_left_normal.add(MenuItem_normal("設定",R.drawable.button_category_clothes_icon)) menuItem_left_normal.add(MenuItem_normal("設定",R.drawable.button_category_clothes_icon)) nav_menu_items_switch.setOnItemClickListener { parent, view, position, id -> Toast.makeText(this, "Clicked: ${id}", Toast.LENGTH_SHORT).show() drawer_layout.closeDrawer(Gravity.LEFT) drawer_layout.closeDrawer(Gravity.RIGHT) } nav_view.setNavigationItemSelectedListener(this) nav_view_right.setNavigationItemSelectedListener(this) right_btn.setOnClickListener { nav_view_right.setBackgroundResource(R.drawable.pic_rightbar_bg2) this.drawer_layout.openDrawer(nav_view_right) } menuBtn.setOnClickListener { nav_view.setBackgroundResource(R.drawable.pic_category_bg) nav_menu_items_switch.adapter = MenuItem_switchAdapter(this,menuItem_left_switch) this.drawer_layout.openDrawer(nav_view) } menu2Btn.setOnClickListener { nav_view.setBackgroundResource(R.drawable.pic_detailed_search_bg) nav_menu_items_switch.adapter = MenuItem_normalAdapter(this,menuItem_left_normal) this.drawer_layout.openDrawer(nav_view) } } override fun onNavigationItemSelected(item: android.view.MenuItem): Boolean { when (item.itemId) { R.id.navigation_home -> Toast.makeText(this,"テスト表示1",Toast.LENGTH_LONG).show() R.id.navigation_dashboard -> Toast.makeText(this,"テスト表示2",Toast.LENGTH_LONG).show() R.id.navigation_notifications -> Toast.makeText(this,"テスト表示3",Toast.LENGTH_LONG).show() R.id.config1 -> Toast.makeText(this,"テスト表示4",Toast.LENGTH_LONG).show() R.id.config2 -> Toast.makeText(this,"テスト表示5",Toast.LENGTH_LONG).show() } drawer_layout.closeDrawer(Gravity.LEFT) drawer_layout.closeDrawer(Gravity.RIGHT) return true } override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.bottom_navigation_item,menu) return super.onCreateOptionsMenu(menu) } }
1行のモデルクラス
import android.media.Image import android.widget.ImageView import android.widget.Switch class MenuItem_switch ( val title2: String, val switch2: Switch )
adapterの全文
class MenuItem_switchAdapter(val context: Context, val items: List<MenuItem_switch>): BaseAdapter() { val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater override fun getCount(): Int { return items.count() } override fun getItem(position: Int): MenuItem_switch { return items[position] } override fun getItemId(position: Int): Long { return position.toLong() } override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { val view_switch = layoutInflater.inflate(R.layout.menu_item2,parent,false) view_switch.title.text = items[position].title2 view_switch.switch_1.setOnCheckedChangeListener{ buttonView, isChecked -> if (isChecked){ Toast.makeText(context, "ON: $", Toast.LENGTH_SHORT).show() }else{ Toast.makeText(context, "OFF: ${items[position].switch2}", Toast.LENGTH_SHORT).show() } } return view_switch }
回答1件
あなたの回答
tips
プレビュー