Использование рекламы AdMob с ListAdapter на Android - PullRequest
0 голосов
/ 20 февраля 2011

В настоящее время я занимаюсь разработкой приложения, в котором главный экран не имеет фактического представления, как в setContentView (R.layout.myScreen); используется. Вместо этого он использует файл XML, который просто детализирует текстовое представление, которое назначается адаптеру списка и заполняется данными из базы данных.

Ниже приведен XML-файл, который используется

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:myapp="http://schemas.android.com/apk/res/com.BoardiesITSolutions.PasswordManager"
            android:id="@+id/showLogin"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="10dp"
            android:textSize="16dp">
    </TextView>

Ниже приведен код, в котором данные добавляются в адаптер списка текстовых представлений

открытый класс ShowLogins расширяет ListActivity {

String LOGINS[] = null;
String company = null;
String longClickCompany;

String companyName = "";
String companyURL = "";
String companyUsername = "";
String companyPassword = "";
Boolean passwordEnabled;
public void onCreate(Bundle savedInstanceState)
{
    SharedPreferences settings = getSharedPreferences("prefs", 0);

    boolean enablePassword = settings.getBoolean("enablePassword", false);
    boolean loggedIn = settings.getBoolean("loggedIn", false);
    super.onCreate(savedInstanceState);
    if (loggedIn)
    {
        passwordEnabled = settings.getBoolean("enablePassword", false);
        setContentView(R.layout.show_login);

    //registerForContextMenu(getListView());


    addToArray();

    setListAdapter(new ArrayAdapter<String>(this, R.id.showLoginBox, LOGINS));

    //ListView lv = getListView();
    ListView lv = (ListView)findViewById(R.id.show_list_view);
    //View myView = findViewById(R.layout.advert);
    //lv.addView(myView);

    lv.setTextFilterEnabled(true);

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            longClickCompany = ((TextView) view).getText().toString();
            return false;
        }
    });

    lv.setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            company = ((TextView) view).getText().toString();
            StringTokenizer st = new StringTokenizer(company, "\n");
            String companyName = st.nextToken();
            String username = st.nextToken();
            prepareLoadingWebsite(companyName, username);
        }
    });
    }
    else
    {
        Intent intent = new Intent(ShowLogins.this, SplashScreen.class);
        startActivity(intent);
    }
}

private void addToArray()
{
    int totalRows = 0;
    int added = 0;
    int arrayField = 0;
    SQLiteDatabase myDB = null;
    Cursor c = null;
    Cursor count = null;
    try
    {
        myDB = this.openOrCreateDatabase("PasswordManager", MODE_PRIVATE, null);
        count = myDB.rawQuery("SELECT COUNT(*) FROM PASSWORD", null);
        if (count.moveToNext())
        {
            totalRows = count.getInt(0);
        }
        LOGINS = new String[totalRows];

        c = myDB.rawQuery("SELECT * FROM password ORDER BY pas_company ASC", null);

        while(arrayField <=2 && c.moveToPosition(added))
        {
            LOGINS[added] = c.getString(1) + "\n" + c.getString(3);
            added++;
        }

        if (totalRows == 0)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("No login records have been found.\n\n Press menu > New login to add a record")
                .setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
            AlertDialog alert = builder.create();
            alert.show();
        }
        else
        {
            setListAdapter(new ArrayAdapter<String>(this, R.layout.show_login, LOGINS));

            ListView lv = getListView();
            lv.setTextFilterEnabled(true);
        }

    }
    catch (SQLiteException ex)
    {
        Log.d("Database Error", ex.toString());
    }
    finally
    {
        myDB.close();
        c.close();
        count.close();
    }
}

Ответы [ 3 ]

4 голосов
/ 20 февраля 2011

Когда вы используете ListActivity, вы получаете макет контента, указанный системой, если вы сами его не указали.Создайте свой собственный макет для действия, которое выглядит примерно так:

<?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">
    <ListView android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1" />
    <!-- Ad view goes here with layout_width="match_parent" and layout_height="wrap_content" -->
</LinearLayout>

Установите его, используя setContentView как обычно.Для ListActivity требуется ListView с идентификатором @android:id/list, который он может найти, если вы используете пользовательский макет.Высота = 0, вес = 1 конфигурация списка даст ему все оставшееся пространство в макете после измерения высоты объявления.

0 голосов
/ 20 февраля 2011

Если вы используете getListView(), тогда ваш xml R.layout.myScreen - это не просто TextView. Он должен содержать <ListView>.

Вам не нужно добавлять Admob's View из адаптера. Вы можете поместить его в свой вид ниже ListView. Что-то вроде:

<RelativeLayout android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <AdmobSomething android:id="@+id/admob"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"/>

    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/admob" />

</RelativeLayout>
0 голосов
/ 20 февраля 2011

Из того, что вы сказали, вы не хотите, чтобы реклама admob имела какое-либо отношение к ListAdapter.

Вы хотите добавить рекламу admob внизу вашего LinearLayout, ноВы должны сообщить нам, почему приложение было закрыто.

Сообщите нам об этом, и мы сможем вам помочь оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...