🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1766閲覧

レイアウトの中に別のレイアウトを入れたらうまく動かなくなりました

kashikoma

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/09/17 09:18

編集2019/09/18 21:45

メモ帳アプリを作っていて、新規メモを登録する画面に遷移するためのFABを設置しようとしています。

①メモ一覧画面でFABタップ
②新規登録画面に遷移
③内容を入力し、登録ボタンをタップ
④一覧画面に戻る
という流れは問題なく出来るのですが、④のところで登録したはずのメモが表示されません。

最初は、FABをLinearLayoutの中に置いてみたのですが一覧の上に重ならなかったので、
調べた情報をもとに、LinearLayoutの中にCoordinatorLayoutを追加し、その中にFABを置きました。結果、FABを狙い通りに表示させることはできました。

しかしCoordinatorLayoutを追加してその中にFABを置いてからは、前述のとおり新規メモの登録ができなくなりました。
FABのidの取得がうまく出来なくなったことが原因じゃないかと自分は考えています。
レイアウトの書き方がいけないのでしょうか?それともアクティビティの方のコードを直したらよいでしょうか…

どこをどう直せばいいか教えて頂けたら幸いです。
ちなみにFABのidを取得するコードは次のものです。MemoListActivity.javaの一番後ろに書いてます

//新規作成ボタン FloatingActionButton newMemo = findViewById(R.id.newMemo);

該当のソースコード

MemoListActivity.java

public class MemoListActivity extends AppCompatActivity { // MemoOpenHelperクラスを定義 MemoOpenHelper helper = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_memolist); // ツールバーをアクションバーとしてセット Toolbar toolbar = (Toolbar) findViewById(R.id.memo_toolbar); toolbar.setTitle("メモ一覧"); setSupportActionBar(toolbar); // データベースから値を取得する if(helper == null){ helper = new MemoOpenHelper(MemoListActivity.this); } // メモリストデータを格納する変数 ArrayList<HashMap<String, String>> memoList = new ArrayList<>(); // データベースを取得する SQLiteDatabase db = helper.getWritableDatabase(); try { // rawQueryというSELECT専用メソッドを使用してデータを取得する Cursor c = db.rawQuery("select uuid, body from MEMO_TABLE order by id", null); // Cursorの先頭行があるかどうか確認 boolean next = c.moveToFirst(); // 取得した全ての行を取得 while (next) { HashMap<String,String> data = new HashMap<>(); // 取得したカラムの順番(0から始まる)と型を指定してデータを取得する String uuid = c.getString(0); String body = c.getString(1); if(body.length() > 10){ // リストに表示するのは10文字まで body = body.substring(0, 11) + "..."; } // 引数には、(名前,実際の値)という組合せで指定します 名前はSimpleAdapterの引数で使用します data.put("body",body); data.put("id",uuid); memoList.add(data); // 次の行が存在するか確認 next = c.moveToNext(); } } finally { // finallyは、tryの中で例外が発生した時でも必ず実行される // dbを開いたら確実にclose db.close(); } // Adapter生成 SimpleAdapter simpleAdapter = new SimpleAdapter(this, memoList, // 使用するデータ android.R.layout.simple_list_item_2, // 使用するレイアウト new String[]{"body","id"}, // どの項目を new int[]{android.R.id.text1, android.R.id.text2} // どのidの項目に入れるか ); // idがmemoListのListViewを取得 ListView listView = (ListView) findViewById(R.id.memoList); listView.setAdapter(simpleAdapter); // リスト項目をクリックした時の処理 listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ /** * @param parent ListView * @param view 選択した項目 * @param position 選択した項目の添え字 * @param id 選択した項目のID */ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // インテント作成 第二引数にはパッケージ名からの指定で、遷移先クラスを指定 Intent intent = new Intent(MemoListActivity.this, com.j16390mf.memo.CreateMemoActivity.class); // 選択されたビューを取得 TwoLineListItemを取得した後、text2の値を取得する TwoLineListItem two = (TwoLineListItem)view; TextView idTextView = (TextView)two.getText2(); String isStr = (String) idTextView.getText(); // 値を引き渡す (識別名, 値)の順番で指定します intent.putExtra("id", isStr); // Activity起動 startActivity(intent); } }); //新規作成ボタン FloatingActionButton newMemo = findViewById(R.id.newMemo); newMemo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // CreateMemoActivityへ遷移 Intent intent = new Intent(MemoListActivity.this, com.j16390mf.memo.CreateMemoActivity.class); intent.putExtra("id", ""); startActivity(intent); } }); }

activity_memolist.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MemoListActivity"> <android.support.v7.widget.Toolbar android:id="@+id/memo_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.FloatingActionButton android:id="@+id/newMemo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:src="@drawable/ic_add_white_24dp" android:layout_margin="24dp" /> </android.support.design.widget.CoordinatorLayout> <ListView android:id="@+id/memoList" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakajika

2019/09/18 02:39

レイアウトの階層は本当にこの通りでしょうか?これだとListViewの上にCoordinatorLayoutおよびFABは重ならないと思います。
kashikoma

2019/09/18 02:48

コメント有難うございます。 レイアウトのコードは確かにこのとおりです。実機で見ても右下にFABが表示されています。 ですが、よく考えてみたらご指摘のとおり FABだけ表示されてListViewは見えなくなってしまっているのかもしれないと気づきました… レイアウトの書き方の問題かもしれないということですね。
kakajika

2019/09/18 03:08 編集

なるほど、そういうことであればCoordinatorLayoutをレイアウトのルートにして、その下にLinearLayoutとFABを配置するのがいいと思います。ただ、FABがクリックできないのはまた別の問題かもしれません。
kashikoma

2019/09/18 10:55

LinearLayoutをCoordinatorの下にしたら解決しました。 やはりListViewが隠れてしまっていて、登録できていなかったと思っていたメモも一覧に表示されていました。 FABをタップしたあとの流れは問題なくできますので大丈夫です。 kakajika様、誠にありがとうございました。
swordone

2019/09/18 14:35

解決したならその解決法を「自己解決」として投稿してください。
guest

回答1

0

自己解決

activity_memolist.xml において
レイアウトのルートをCoordinatorLayoutにして、その下にLinearLayoutとFABを配置する。

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MemoListActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/memo_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> <ListView android:id="@+id/memoList" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/newMemo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="24dp" android:src="@drawable/ic_add_white_24dp" /> </android.support.design.widget.CoordinatorLayout>

投稿2019/09/19 09:45

kashikoma

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問