fragment上のリストビューのボタンを押して別のfragmentの詳細画面に飛ぶようなプログラムを書きたいと思っています。
とあるHPを参考に以下のようなソースコードを描いてみましたが、リストビューまでは動くのですが、クリックしても遷移しません。
リストビューを表示しているfragmentのクラスの中のonCreateViewのメソッドの中に記載しています。
初心者で質問が今ひとつで申し訳ありません。
どなたかアドバイスいただけないでしょうか?
java
1 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 2 @Override 3 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 4 Fragment_Summary fragment = new Fragment_Summary(); 5 Bundle bundle = new Bundle(); 6 bundle.putInt("selected",position); 7 fragment.setArguments(bundle); 8 FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 9 FragmentTransaction transaction = fragmentManager.beginTransaction(); 10 transaction.replace(R.id.main_frame, fragment); 11 transaction.addToBackStack(null); 12 transaction.commit(); 13 14 } 15 }
getView
1 @Override 2 public View getView(int position, View convertView, ViewGroup parent){ 3 4 ViewHolder viewHolder; 5 if(convertView == null){ 6 LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 7 convertView = inflater.inflate(R.layout.mainlist, parent, false); 8 viewHolder = new ViewHolder(); 9 viewHolder.meigaracode = (TextView)convertView.findViewById(R.id.meigaraText); 10 viewHolder.companyname = (TextView)convertView.findViewById(R.id.companynameText); 11 viewHolder.bbstart = (TextView)convertView.findViewById(R.id.bbStart); 12 viewHolder.bbend = (TextView)convertView.findViewById(R.id.bbEnd); 13 viewHolder.yosokakaku = (TextView)convertView.findViewById(R.id.yosoKabuka); 14 15 convertView.setTag(viewHolder); 16 } else { 17 viewHolder = (ViewHolder)convertView.getTag(); 18 } 19 MainList item = (MainList)getItem(position); 20 viewHolder.bbstart.setText(item.getBbstart()); 21 viewHolder.bbend.setText(item.getBbend()); 22 viewHolder.meigaracode.setText(item.getMeigaracode()); 23 viewHolder.companyname.setText(item.getCompanyname()); 24 return convertView; 25 } 26
maillist.xml
1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="90dp" 5 android:orientation="horizontal"> 6 7 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 8 android:layout_width="300dp" 9 android:layout_height="90dp" 10 android:orientation="vertical" 11 android:paddingTop="10dp" 12 android:paddingBottom="10dp" 13 android:background="@color/white_color"> 14 15 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 16 android:id="@+id/layout1" 17 android:layout_width="match_parent" 18 android:layout_height="20dp" 19 android:layout_gravity="top" 20 android:orientation="horizontal"> 21 22 <TextView 23 android:id="@+id/meigaraText" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:text="@string/meigaracode" 27 android:textAppearance="?android:attr/textAppearanceSmall" /> 28 29 <TextView 30 android:id="@+id/companynameText" 31 android:layout_width="match_parent" 32 android:layout_height="wrap_content" 33 android:text="@string/companyname" 34 android:textAppearance="?android:attr/textAppearanceMedium" 35 tools:textSize="14sp" /> 36 37 </LinearLayout> 38 39 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 40 android:id="@+id/layout2" 41 android:layout_width="match_parent" 42 android:layout_height="20dp" 43 android:layout_gravity="center" 44 android:orientation="horizontal"> 45 46 <TextView 47 android:id="@+id/period" 48 android:layout_width="wrap_content" 49 android:layout_height="wrap_content" 50 android:layout_gravity="center_vertical" 51 android:text="BB期間:" 52 android:textAppearance="?android:attr/textAppearanceMedium" 53 android:textSize="12sp" /> 54 55 <TextView 56 android:id="@+id/bbStart" 57 android:layout_width="wrap_content" 58 android:layout_height="wrap_content" 59 android:layout_gravity="center_vertical" 60 android:text="@string/bbstart" 61 android:textAppearance="?android:attr/textAppearanceMedium" 62 android:textSize="12sp" /> 63 64 <TextView 65 android:id="@+id/period" 66 android:layout_width="wrap_content" 67 android:layout_height="wrap_content" 68 android:layout_gravity="center_vertical" 69 android:text=" から " 70 android:textAppearance="?android:attr/textAppearanceMedium" 71 android:textSize="12sp" /> 72 73 <TextView 74 android:id="@+id/bbEnd" 75 android:layout_width="wrap_content" 76 android:layout_height="wrap_content" 77 android:layout_gravity="center_vertical" 78 android:text="@string/bbend" 79 android:textAppearance="?android:attr/textAppearanceMedium" 80 android:textSize="12sp" /> 81 82 83 </LinearLayout> 84 85 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 86 android:id="@+id/layout3" 87 android:layout_width="match_parent" 88 android:layout_height="20dp" 89 android:layout_gravity="bottom" 90 android:orientation="horizontal"> 91 92 <TextView 93 android:id="@+id/yosocaption" 94 android:layout_width="wrap_content" 95 android:layout_height="wrap_content" 96 android:layout_gravity="center_vertical|end" 97 android:text="予想初値" 98 android:textAppearance="?android:attr/textAppearanceMedium" 99 android:textSize="12sp" /> 100 101 <TextView 102 android:id="@+id/yosoKabuka" 103 android:layout_width="wrap_content" 104 android:layout_height="wrap_content" 105 android:layout_gravity="center_vertical|end" 106 android:text="@string/yosokabuka" 107 android:textAppearance="?android:attr/textAppearanceMedium" 108 android:textSize="12sp" /> 109 110 </LinearLayout> 111 112 113 </LinearLayout> 114 115 <Button 116 android:id="@+id/button1" 117 style="@style/Widget.AppCompat.Button" 118 android:layout_width="0dp" 119 android:layout_height="30dp" 120 android:layout_weight="2" 121 android:layout_gravity="center" 122 android:text="@string/button" /> 123 124</LinearLayout>
クリック時にこの onItemClick に制御が移っているのはご確認済みでしょうか.
また, 宜しければ, 行のレイアウトの xml と, アダプタの getView メソッドをご提示頂けますか?
すみません。確認方法がわからず困っています。
LOGCATを見ても、どれがそこに該当するのかわからないでいます。
ちなみに、エミュレーターをクリックしてもLOGには直ちには何も出ずに、30秒くらいしてから色々なLOGが出てきます。
Log クラスをご利用頂くのが簡単かと思います.
Log.d(タグ, 文字列);
とすると, LOGCAT にタグ: 文字列が追加表示されますので, onItemClick の先頭等に入れられればご確認頂けます.
2019-03-09 00:27:00.018 1758-1761/? D/hwcomposer: hw_composer sent 36 syncs in 60s
2019-03-09 00:27:00.189 1755-1772/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 941282 , only wrote 788400
2019-03-09 00:27:00.276 2253-2253/? I/BeaconBle: Scan : No clients left, canceling alarm.
2019-03-09 00:27:07.131 1827-1840/? E/memtrack: Couldn't load memtrack module
2019-03-09 00:27:07.131 1827-1840/? W/android.os.Debug: failed to get memory consumption info: -1
tagが表示されずに、上記のようなメッセージが出ました
表示されないのであれば, onItemClick に制御が移っていないということかと思います.
つまり, フラグメントの遷移以前の問題ということですね.
行のレイアウトの xml と, アダプタの getView メソッドをご提示頂けますか?
いえ, フラグメントのレイアウトではなく, ListView の各行のレイアウトの mainlist.xml をお願い致します.
失礼しました。更新しました。
ありがとうございます.
button1 をクリックしたら遷移するということですね.
ちなみに, ボタンでなくてはならないのでしょうか. 行そのもののクリックでは何か他の仕様を満たせませんか?
ボタンでなくても大丈夫です。
でしたら, レイアウトから button を消して, 実行時に行をクリックすれば良いように思います.
できました!ありがとうございます。
これって何が原因になるのでしょうか? ボタンを配置した途端に、mListViewのsetOnItemClickListenerがボタンをさしてしまうのですか?
ボタンでは ListView のリスナは反応致しません. taro_yamada さんは恐らくボタンを機能させようとボタンをクリックされていたと思いますが, ご存知の通りボタンにはボタン のリスナがありますので, もしボタンで遷移をさせなければならないのでしたら, getView 内でボタンにボタンのリスナを登録する必要がございました.
そして, (うろ覚えなのですが)例えボタンがあったとしても, ボタン以外の箇所をクリックすれば, 実は画面遷移が出来ていたのではないでしょうか.
この辺りは実際に試していただく方が確実かもしれません.
なるほど、夜分遅くにご対応本当にありがとうございました。
作成を進めてみたいと思います。
あなたの回答
tips
プレビュー