質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.51%

  • Android

    7297questions

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

  • button

    101questions

    HTMLで用いる<button>タグです。

[Android]アプリ一覧の最下部にボタンを追加したい

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 305

rick

score 3

 前提・実現したいこと

androidでアプリ一覧を作成しており、最下部にアプリ一覧とは別のボタンを配置しようとしています。
ところがボタンを配置したところ、一覧のすべてにボタンが重なって付与されてしまいます。
(リスト一覧の部品の一部としてボタンが扱われているように見えます。)
リスト一覧とは別に、最下部にボタンを配置する方法はありますでしょうか?3日くらい悩んでいるので、助けて頂ければ嬉しいです。

(item_list.xmlというアイテム用のレイアウトファイルを別途作成し、それをactivity_main.xmlのlistViewに渡しています。
アプリ一覧のリストは、listViewとArrayAdapterを使用して実装しております。)

 LancherApp.java

public class LancherApp extends Activity {

    @Override
    protected void onCreate (Bundle bundle) {
        super.onCreate (bundle);
        requestWindowFeature (Window.FEATURE_NO_TITLE);
        setContentView (R.layout.activity_main);

        // Get installed app info from device.
        PackageManager packageManager = getPackageManager();
        final List<ApplicationInfo> installedAppList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

        // Stack data to list.
        final List<AppData> appList = new ArrayList<AppData>();
        for (ApplicationInfo app : installedAppList) {
            AppData data = new AppData();
            data.label = app.loadLabel(packageManager).toString();
            data.icon = app.loadIcon(packageManager);
            data.name = app.packageName;
            appList.add (data);
        }

        // Show app list to listview.
        ListView listView = new ListView(this);
        listView = (ListView) findViewById(R.id.card_list);

        ViewGroup parentView = (ViewGroup) listView.getParent();
        if (parentView != null) {
            parentView.removeView(listView);
        }
        listView.setAdapter(new ApplicationListAdapter(this, appList));

        setContentView(listView);
}

        private static class ApplicationListAdapter extends ArrayAdapter<AppData> {
            //
            private final LayoutInflater mInflater;

            public ApplicationListAdapter (Context context, List<AppData> dataList) {
                //super(context, R.layout.activity_main);
                super(context, 0);
                mInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
                addAll(dataList);
            }

            @Override
            public View getView (int position, View convertView, ViewGroup parent) {
                ViewHolder holder = new ViewHolder();

                if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.item_list, parent, false);
                    holder.textLabel = (TextView) convertView.findViewById(R.id.label);
                    holder.imageIcon = (ImageView) convertView.findViewById(R.id.icon);
                    holder.packageName = (TextView) convertView.findViewById(R.id.name);

                    ViewGroup parentView = (ViewGroup) convertView.getParent();
                    if (parentView != null) {
                        parentView.removeView(convertView);
                    }
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }

                // Get data to show.
                final AppData data = getItem(position);
                // Set label & icon to listview.
                holder.textLabel.setText(data.label);
                holder.imageIcon.setImageDrawable(data.icon);
                holder.packageName.setText(data.name);

                return convertView;
            }
        }
//
final AppData data = getItem(position);
//
holder.textLabel.setText(data.label);
holder.imageIcon.setImageDrawable(data.icon);
holder.packageName.setText(data.name);

// private class for storing application data.
private static class AppData {
String label;
Drawable icon;
String name;
}

// private class ViewHolder.
private static class ViewHolder {
TextView textLabel;
ImageView imageIcon;
TextView packageName;
}

 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="Button" />

    <ListView
        android:id="@+id/card_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>

</LinearLayout>

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

        <ImageView
            android:id="@+id/icon"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_below="@+id/button" />

        <TextView
            android:id="@+id/label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button"
            android:layout_toRightOf="@+id/icon"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/label"
            android:layout_below="@+id/label" />

</RelativeLayout>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kakajika

    2018/03/21 15:20

    ApplicationListAdapterというクラスのソースコードはありますか?そちらも貼ってもらえると回答しやすいです。

    キャンセル

回答 2

0

>kakajikaさん

ご返信ありがとうございます。
ApplicationListAdapterのコードを添付させていただきます。


// private Adapter Class indicates label and icon of application.
private static class ApplicationListAdapter extends ArrayAdapter<AppData> {
//
private final LayoutInflater mInflater;

public ApplicationListAdapter (Context context, List<AppData> dataList) {
super(context, R.layout.activity_main);
mInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
addAll(dataList);
}

@Override
public View getView (int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();

if (convertView == null) {
convertView = mInflater.inflate(R.layout.activity_main, parent, false);
holder.textLabel = (TextView) convertView.findViewById(R.id.label);
holder.imageIcon = (ImageView) convertView.findViewById(R.id.icon);
holder.packageName = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

//
final AppData data = getItem(position);
//
holder.textLabel.setText(data.label);
holder.imageIcon.setImageDrawable(data.icon);
holder.packageName.setText(data.name);

return convertView;
}
}

// private class for storing application data.
private static class AppData {
String label;
Drawable icon;
String name;
}

// private class ViewHolder.
private static class ViewHolder {
TextView textLabel;
ImageView imageIcon;
TextView packageName;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/23 15:09

    質問のコードを追加する場合は、質問自体を編集するようにしてもらえますでしょうか?回答の方ですと通知が来ないので気づきませんしそもそも回答に書くべきではありません。また、ソースコードはバッククォート3つ(```)で囲むなどして読みやすいようにしてください。

    キャンセル

  • 2018/03/23 21:49

    コードを見やすくする書き方を存じ上げておらず、大変失礼致しました。
    編集をさせて頂きました。また、回答へ記載したArrayAdapterのコードも入れました。
    ご指摘ありがとうございます。

    キャンセル

0

convertView = mInflater.inflate(R.layout.activity_main, parent, false);

こちらのコードを見る限り、Activity用に用意したレイアウトをListViewのアイテムのレイアウトとして使っているようです。アイテム用のレイアウトファイルを別途作成して、それを渡すようにしてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/24 21:47

    item_list.xmlというアイテム用のレイアウトファイルを別途作成し、
    それを渡すようにしたところ、アプリ一覧の表示はできました。
    (item_list.xmlには、activity_main.xml内にあったImageView、TextViewを移動)

    ただこれまでリスト内にあった《+》ボタンが無くなってしまいました。。。
    色々お時間を使って頂いており申し訳ありません。。
    出来ましたら《+》ボタンを表示する方法をご教授頂ければ幸いです・・

    上記修正に関連して、LancherApp.javaで修正した箇所です。
    ・LancherApp内にて、id:card_listのlistViewを取得する行を追加
    ・ApplicationListAdapter.getView()内にて、convertViewにitem_list.xmlを設定

    activity_main.xml
    ```
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:gravity="center"
    android:text="Button" />

    <ListView
    android:id="@+id/card_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    </ListView>

    </LinearLayout>

    ```

    item_list.xml
    ```
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="50dp"
    android:layout_marginLeft="100dp">

    <ImageView
    android:id="@+id/icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_below="@+id/button" />

    <TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/button"
    android:layout_toRightOf="@+id/icon"
    android:textSize="18sp" />

    <TextView
    android:id="@+id/name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/label"
    android:layout_below="@+id/label" />

    </RelativeLayout>
    ```

    キャンセル

  • 2018/03/24 21:48

    ↑すみません、(```)が効かないんですね・・

    キャンセル

  • 2018/03/24 21:56

    質問を上げた際のコードに、上記添付したコードを反映させて頂きました。よろしくお願い致します。

    キャンセル

  • 2018/03/24 22:44

    うーんと、どの《+》ボタンのことなのか分かりませんが、item_list.xmlの中にButtonが見当たらないようなので追加すればよいのではないでしょうか?

    キャンセル

同じタグがついた質問を見る

  • Android

    7297questions

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

  • button

    101questions

    HTMLで用いる<button>タグです。