Почему кнопки Android зависают в моем приложении и не работают?

1

В настоящее время я работаю над приложением, в котором пользователь может публиковать журналы в проекте. Однако кажется, что я столкнулся с проблемой и не могу найти ответ. Кнопка "Назад" не закрывает активность журнала после того, как пользователь делает сообщение. Вместо этого приложение перестает отвечать; логарифм из такого экземпляра находится внизу. Однако нажатие "wait" вместо "force close" возобновляет приложение, но кнопка "Назад" все еще не работает. Ниже приведена схема деятельности. Каждый вид в viewflipper - это другой журнал для проекта с несколькими edittexts для заполнения информации и кнопки для записи в журнал. Первоначально это было указано, где текущие сообщения отображаются под кнопками сообщения в списке. В этот момент кнопка "Назад" имела полную функциональность. Тем не менее, список в прокруткеview работает не так хорошо, поэтому его нужно было изменить на скользящий ящик со списком, адаптер которого изменяется каждый раз, когда пользователь переворачивается между журналами. Это тот момент, когда функция обратной кнопки была потеряна. Сначала я думал, что делаю что-то не так в моем методе onKeyDown, но после попытки его отладки, изменения и даже удаления, я обнаружил, что он никогда не вызывается. Поскольку это началось после того, как я перешел на скользящий ящик, я пришел к выводу, что он имеет какое-то отношение к скользящему ящику. Любая помощь с этим будет высоко оценена.

EDIT: После тщательного изучения этой проблемы, я обнаружил, что это не просто кнопка назад, которая делает это. Кнопка настройки и кнопка поиска также демонстрируют это поведение. Единственной кнопкой, которая показывает правильную функциональность, является кнопка "Дом". Однако функциональность в рамках этой деятельности не затрагивается. Я все еще могу опубликовать, перевернуть между видами, просматривать и редактировать сообщения.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/iphonebg" >

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@drawable/toolbar_gradient"
        android:gravity="center_vertical" >

        <!-- Header -->
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0" >

        <!-- Date -->
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0" >

        <!-- Tabs -->
    </TableRow>

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" >

        <TableLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/iphonebg" >

            <TableRow
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1" >

                <ViewFlipper
                    android:id="@+id/ViewFlipper01"
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="2" >

                    <!-- adding views to ViewFlipper -->
                    <!-- ScrollView 1 -->
                    <!-- ScrollView 2 -->
                    <!-- ScrollView 3 -->
                    <!-- ScrollView 4 -->
                    <!-- ScrollView 5 -->
                </ViewFlipper>
            </TableRow>
        </TableLayout>

        <SlidingDrawer
            android:id="@+id/drawer"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:content="@+id/anyPosts"
            android:handle="@+id/handle" >

            <Button
                android:id="@+id/handle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minHeight="35dip"
                android:background="@drawable/black_btn_bg"
                android:text="Drag or Tap to View Posts"
                android:textColor="#FFFFFF"
                android:textStyle="bold" />

            <ListView
                android:id="@+id/anyPosts"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:paddingLeft="5dip"
                android:paddingRight="5dip" >
            </ListView>
        </SlidingDrawer>
    </FrameLayout>

</TableLayout>

Степень кода, связанного с выдвижным ящиком, расположенным в моем методе onCreate:

        final SlidingDrawer slide = (SlidingDrawer) findViewById(R.id.drawer);
        final Button btnDownloads = (Button) findViewById(R.id.handle);
        slide.setOnDrawerOpenListener(new OnDrawerOpenListener() {

            @Override
            public void onDrawerOpened() {
                btnDownloads.setText("Drag or Tap to Close Posts");
            }
        });

        slide.setOnDrawerCloseListener(new OnDrawerCloseListener() {

            @Override
            public void onDrawerClosed() {
                btnDownloads.setText("Drag or Tap to View Posts");
            }
        });
        slide.animateOpen();

Степень кода, относящегося к списку:

    ListView listToFill = (ListView) findViewById(R.id.anyPosts);
    listToFill.setAdapter(listViewAdapter);

Logcat:

06-07 13:51:44.394: I/InputDispatcher(1464): Application is not responding: AppWindowToken{40cd7758 token=HistoryRecord{40534788 uda.projectlogging/.Radio_Group}} - Window{40ae0a88 uda.projectlogging/uda.projectlogging.Radio_Group paused=false}.  10009.8ms since event, 10009.4ms since wait started
06-07 13:51:44.394: I/WindowManager(1464): Input event dispatching timed out sending to uda.projectlogging/uda.projectlogging.Radio_Group
06-07 13:51:44.444: I/Process(1464): Sending signal. PID: 23939 SIG: 3
06-07 13:51:44.444: I/dalvikvm(23939): threadid=4: reacting to signal 3
06-07 13:51:44.444: I/dalvikvm(23939): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.444: I/Process(1464): Sending signal. PID: 1464 SIG: 3
06-07 13:51:44.444: I/dalvikvm(1464): threadid=4: reacting to signal 3
06-07 13:51:44.484: I/dalvikvm(1464): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.484: I/Process(1464): Sending signal. PID: 1690 SIG: 3
06-07 13:51:44.484: I/dalvikvm(1690): threadid=4: reacting to signal 3
06-07 13:51:44.484: I/dalvikvm(1690): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.484: I/Process(1464): Sending signal. PID: 1639 SIG: 3
06-07 13:51:44.484: I/dalvikvm(1639): threadid=4: reacting to signal 3
06-07 13:51:44.494: I/dalvikvm(1639): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1689 SIG: 3
06-07 13:51:44.494: I/dalvikvm(1689): threadid=4: reacting to signal 3
06-07 13:51:44.494: I/dalvikvm(1689): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1672 SIG: 3
06-07 13:51:44.494: I/dalvikvm(1672): threadid=4: reacting to signal 3
06-07 13:51:44.494: I/dalvikvm(1672): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.494: I/Process(1464): Sending signal. PID: 1656 SIG: 3
06-07 13:51:44.494: I/dalvikvm(1656): threadid=4: reacting to signal 3
06-07 13:51:44.504: I/dalvikvm(1656): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.504: I/Process(1464): Sending signal. PID: 1652 SIG: 3
06-07 13:51:44.504: I/dalvikvm(1652): threadid=4: reacting to signal 3
06-07 13:51:44.514: I/dalvikvm(1652): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1642 SIG: 3
06-07 13:51:44.514: I/dalvikvm(1642): threadid=4: reacting to signal 3
06-07 13:51:44.514: I/dalvikvm(1642): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1664 SIG: 3
06-07 13:51:44.514: I/dalvikvm(1664): threadid=4: reacting to signal 3
06-07 13:51:44.514: I/dalvikvm(1664): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1675 SIG: 3
06-07 13:51:44.514: I/dalvikvm(1675): threadid=4: reacting to signal 3
06-07 13:51:44.514: I/dalvikvm(1675): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1691 SIG: 3
06-07 13:51:44.514: I/dalvikvm(1691): threadid=4: reacting to signal 3
06-07 13:51:44.514: I/dalvikvm(1691): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.514: I/Process(1464): Sending signal. PID: 1590 SIG: 3
06-07 13:51:44.514: I/dalvikvm(1590): threadid=4: reacting to signal 3
06-07 13:51:44.524: I/dalvikvm(1590): Wrote stack traces to '/data/anr/traces.txt'
06-07 13:51:44.734: D/dalvikvm(1464): GC_CONCURRENT freed 1754K, 33% free 9128K/13511K, external 6035K/6964K, paused 2ms+6ms
06-07 13:51:44.814: D/dalvikvm(1464): GC_EXPLICIT freed 31K, 33% free 9107K/13511K, external 6035K/6964K, paused 71ms
06-07 13:51:44.914: E/NetlinkEvent(1351): NetlinkEvent::FindParam(): Parameter 'UDEV_LOG' not found
06-07 13:51:45.364: E/ActivityManager(1464): ANR in uda.projectlogging, pid 23939 (uda.projectlogging/.Radio_Group)
06-07 13:51:45.364: E/ActivityManager(1464): Reason: keyDispatchingTimedOut
06-07 13:51:45.364: E/ActivityManager(1464): Load: 0.26 / 0.25 / 0.21
06-07 13:51:45.364: E/ActivityManager(1464): CPU usage from 7340ms to 0ms ago with 99% awake:
06-07 13:51:45.364: E/ActivityManager(1464):   0.9% 783/als_wq: 0% user + 0.9% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0.8% 1464/system_server: 0.1% user + 0.6% kernel / faults: 1 minor
06-07 13:51:45.364: E/ActivityManager(1464):     0.5% 1489/ActivityManager: 0.1% user + 0.4% kernel
06-07 13:51:45.364: E/ActivityManager(1464):     0.2% 1543/InputDispatcher: 0% user + 0.2% kernel
06-07 13:51:45.364: E/ActivityManager(1464):     0.1% 1539/PowerManagerSer: 0% user + 0.1% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0% 19639/com.svox.pico: 0% user + 0% kernel / faults: 56 minor
06-07 13:51:45.364: E/ActivityManager(1464):     0% 19639/com.svox.pico: 0% user + 0% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0.4% 288/tegra_spi.1: 0% user + 0.4% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0.4% 19564/com.android.vending: 0.2% user + 0.1% kernel
06-07 13:51:45.364: E/ActivityManager(1464):     0.2% 19566/HeapWorker: 0.1% user + 0.1% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0% 1358/battd: 0% user + 0% kernel
06-07 13:51:45.364: E/ActivityManager(1464):   0.1% 21254/com.motorola.android.datamanager: 0.1% user + 0% kernel
06-07 13:51:45.364: E/ActivityManager(1464):     0.1% 21255/HeapWorker: 0.1% user + 0% kernel
06-07 13:51:45.364: E/ActivityManager(1464): 7.9% TOTAL: 1.3% user + 2% kernel + 0.1% iowait + 4.3% softirq
06-07 13:51:45.364: E/ActivityManager(1464): CPU usage from 420ms to 934ms later with 99% awake:
06-07 13:51:45.364: E/ActivityManager(1464):   7.6% 1464/system_server: 1.9% user + 5.7% kernel / faults: 1 minor
06-07 13:51:45.364: E/ActivityManager(1464):     3.8% 1543/InputDispatcher: 0% user + 3.8% kernel
06-07 13:51:45.364: E/ActivityManager(1464): 3.9% TOTAL: 1.9% user + 1.9% kernel

При нажатии кнопки post:

postButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                v.startAnimation(AnimationUtils.loadAnimation(
                        getApplicationContext(), R.anim.image_click));
                data = new JSONObject();
                if (description.equals("")) {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Please Enter a Description",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                } else if (delayStart == null) {
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Please Set Delay Duration",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                } else {
                    try {
                        data.put("COMMENT", description);
                        data.put("DELAYSTART",
                                delayStart.get(Calendar.HOUR_OF_DAY) + ":"
                                        + delayStart.get(Calendar.MINUTE));
                        data.put("DELAYEND", delayEnd.get(Calendar.HOUR_OF_DAY)
                                + ":" + delayEnd.get(Calendar.MINUTE));
                        postEntry();
                        description = "";
                        delayHours = 0;
                        delayMinutes = 0;
                        delayStart = null;
                        delayEnd = null;
                        delay.setText("");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

Проводка записи:

public void postEntry() {
    final ProgressDialog dialog1 = new ProgressDialog(this);
    dialog1.setCancelable(true);
    dialog1.setMessage("Loading...");

    dialog1.show();

    final Thread background1 = new Thread(new Runnable() {
        public void run() {
            Looper.prepare();
            try {
                String type1 = "0";
                switch (current) {
                case 0:
                    type1 = "1";
                    break;
                case 1:
                    type1 = "4";
                    break;
                case 2:
                    type1 = "3";
                    break;
                case 3:
                    type1 = "6";
                    break;
                case 4:
                    type1 = "5";
                    break;
                }
                if (helperMethods.isOnline(currentActivity)) {
                    if (failedUploads)
                        doFailedUploads();
                    SoapObject request = new SoapObject(
                            "http://www.constructiononline.com/service/",
                            "OSLPost");
                    PropertyInfo num1 = new PropertyInfo();
                    num1.setName("userEmail");
                    num1.setValue(settings.getString("EMAIL", ""));
                    request.addProperty(num1);

                    num1 = new PropertyInfo();
                    num1.setName("prj_id");
                    num1.setValue(projectInfo.getID());
                    request.addProperty(num1);

                    num1 = new PropertyInfo();
                    num1.setName("entryDate");
                    num1.setValue(month + "/" + day + "/" + year);
                    request.addProperty(num1);

                    num1 = new PropertyInfo();
                    num1.setName("type");
                    num1.setValue(type1);
                    request.addProperty(num1);

                    num1 = new PropertyInfo();
                    num1.setName("data");
                    num1.setValue(data.toString());
                    request.addProperty(num1);

                    num1 = new PropertyInfo();
                    num1.setName("delete");
                    num1.setValue("false");
                    request.addProperty(num1);

                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                            SoapEnvelope.VER11);
                    envelope.dotNet = true;
                    envelope.setOutputSoapObject(request);
                    HttpTransportSE androidHttpTransport = new HttpTransportSE(
                            URL);

                    androidHttpTransport
                            .call("http://www.constructiononline.com/service/OSLPost",
                                    envelope);

                    Log.e("Response from Post", envelope.getResponse()
                            .toString());

                    updatePostList(false);
                } else {
                    addFailedUploads(settings.getString("EMAIL", ""),
                            projectInfo.getID(), month + "/" + day + "/"
                                    + year, type1, data.toString());
                    JSONObject j = new JSONObject();
                    j.put("LOG_OBJECT", data);
                    j.put("TYPE", type1);
                    j.put("DATE", month + "/" + day + "/" + year);
                    Calendar c = Calendar.getInstance();
                    String created = c.get(Calendar.MONTH) + "/"
                            + c.get(Calendar.DAY_OF_MONTH) + "/"
                            + c.get(Calendar.YEAR) + " "
                            + c.get(Calendar.HOUR) + ":"
                            + c.get(Calendar.MINUTE) + ":"
                            + c.get(Calendar.SECOND) + " "
                            + (c.get(Calendar.AM_PM) == 0 ? "AM" : "PM");
                    j.put("CREATED", created);
                    JSONObject creatorTemp = new JSONObject();
                    creatorTemp.put("ID", "0");
                    creatorTemp.put("NAME", " ");
                    creatorTemp.put("COMPANY", " ");
                    creatorTemp.put("ICON", "NULL");
                    j.put("CREATOR", creatorTemp);
                    j.put("ID", "0");
                    switch (current) {
                    case 0:
                        weatherEntries.put(j);
                        break;
                    case 1:
                        workEntries.put(j);
                        break;
                    case 2:
                        visitorEntries.put(j);
                        break;
                    case 3:
                        deliveryEntries.put(j);
                        break;
                    case 4:
                        noteEntries.put(j);
                        break;
                    }
                }
                if (dialog1 != null && dialog1.isShowing()) {
                    dialog1.dismiss();
                }

            } catch (final Exception e) {
                e.printStackTrace();
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw));
                String stacktrace = sw.toString();

                addOnlineErrorLogEntry(e.getMessage(), stacktrace);
                if (dialog1 != null && dialog1.isShowing()) {
                    dialog1.dismiss();
                }
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                e.getMessage() + " in setupProjects",
                                Toast.LENGTH_LONG).show();

                    }
                });

            }

        }
    });

    // start the background thread
    background1.start();
}

Обновление списка сообщений:

private void updatePostList(final boolean getAll) {
    if (!helperMethods.isOnline(currentActivity)) {
        return;
    }

    final ProgressDialog dialog1 = new ProgressDialog(this);
    dialog1.setCancelable(true);
    dialog1.setMessage("Loading...");

    dialog1.show();

    final Thread background1 = new Thread(new Runnable() {
        public void run() {
            Looper.prepare();
            try {
                if (failedUploads)
                    doFailedUploads();
                SoapObject request = new SoapObject(
                        "http://www.constructiononline.com/service/",
                        "OSLGet");
                PropertyInfo num1 = new PropertyInfo();
                num1.setName("userEmail");
                num1.setValue(settings.getString("EMAIL", ""));
                request.addProperty(num1);

                num1 = new PropertyInfo();
                num1.setName("prj_id");
                num1.setValue(projectInfo.getID());
                request.addProperty(num1);

                num1 = new PropertyInfo();
                num1.setName("startDate");
                num1.setValue("");
                if (!getAll) {
                    num1.setValue(month + "/" + day + "/" + year);
                }
                request.addProperty(num1);

                num1 = new PropertyInfo();
                num1.setName("endDate");
                num1.setValue("");
                request.addProperty(num1);

                num1 = new PropertyInfo();
                num1.setName("type");
                num1.setValue("");
                if (!getAll) {
                    switch (current) {
                    case 0:
                        num1.setValue("1");
                        break;
                    case 1:
                        num1.setValue("4");
                        break;
                    case 2:
                        num1.setValue("3");
                        break;
                    case 3:
                        num1.setValue("6");
                        break;
                    case 4:
                        num1.setValue("5");
                        break;
                    }
                }
                request.addProperty(num1);

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                envelope.dotNet = true;
                envelope.setOutputSoapObject(request);
                HttpTransportSE androidHttpTransport = new HttpTransportSE(
                        URL);

                androidHttpTransport.call(
                        "http://www.constructiononline.com/service/OSLGet",
                        envelope);

                Log.e("response", envelope.getResponse().toString());
                JSONObject temp = new JSONObject(envelope.getResponse()
                        .toString());
                JSONArray entries = temp.getJSONArray("ENTRIES");
                if (getAll) {
                    weatherEntries = new JSONArray();
                    workEntries = new JSONArray();
                    visitorEntries = new JSONArray();
                    deliveryEntries = new JSONArray();
                    noteEntries = new JSONArray();
                }
                switch (current) {
                case 0:
                    weatherEntries = new JSONArray();
                    break;
                case 1:
                    workEntries = new JSONArray();
                    break;
                case 2:
                    visitorEntries = new JSONArray();
                    break;
                case 3:
                    deliveryEntries = new JSONArray();
                    break;
                case 4:
                    noteEntries = new JSONArray();
                    break;
                }

                for (int x = 0; x < entries.length(); x++) {
                    switch (entries.getJSONObject(x).getInt("TYPE")) {
                    case 1:
                        weatherEntries.put(entries.getJSONObject(x));
                        break;
                    case 3:
                        visitorEntries.put(entries.getJSONObject(x));
                        break;
                    case 4:
                        workEntries.put(entries.getJSONObject(x));
                        break;
                    case 5:
                        noteEntries.put(entries.getJSONObject(x));
                        break;
                    case 6:
                        deliveryEntries.put(entries.getJSONObject(x));
                        break;
                    }
                }
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        if (getAll) {
                            setupWeatherLog();
                        } else {
                            getPosts();
                        }
                    }

                });
                if (dialog1 != null && dialog1.isShowing()) {
                    dialog1.dismiss();
                }

            } catch (final Exception e) {
                e.printStackTrace();
                StringWriter sw = new StringWriter();
                e.printStackTrace(new PrintWriter(sw));
                String stacktrace = sw.toString();

                addOnlineErrorLogEntry(e.getMessage(), stacktrace);
                if (dialog1 != null && dialog1.isShowing()) {
                    dialog1.dismiss();
                }
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                e.getMessage() + " in setupProjects",
                                Toast.LENGTH_LONG).show();

                    }
                });

            }

            if (dialog1 != null && dialog1.isShowing()) {
                dialog1.dismiss();
            }

        }
    });

    // start the background thread
    background1.start();
}

Заполнение списка:

private void getPosts() {

    JSONArray entriesToShow = new JSONArray();
    JSONArray postsToLoad = null;
    switch (current) {
    case 0:
        postsToLoad = weatherEntries;
        break;
    case 1:
        postsToLoad = workEntries;
        break;
    case 2:
        postsToLoad = visitorEntries;
        break;
    case 3:
        postsToLoad = deliveryEntries;
        break;
    case 4:
        postsToLoad = noteEntries;
        break;
    }

    for (int i = 0; i < postsToLoad.length(); i++) {
        try {
            JSONObject temp = postsToLoad.getJSONObject(i);
            String[] tempDay = temp.getString("DATE").split("/");
            if (Integer.parseInt(tempDay[0]) == month
                    && Integer.parseInt(tempDay[1]) == day
                    && Integer.parseInt(tempDay[2]) == year) {
                entriesToShow.put(temp);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    BaseAdapter listViewAdapter;
    switch (current) {
    case 0:
        listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
                currentActivity, entriesToShow, current);
        break;
    case 1:
        listViewAdapter = new WorkLogPostLazyAdapter(currentActivity,
                entriesToShow);
        break;
    case 2:
        listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
                currentActivity, entriesToShow, current);
        break;
    case 3:
        listViewAdapter = new WeatherDeliveryVisitLazyAdapter(
                currentActivity, entriesToShow, current);
        break;
    case 4:
        listViewAdapter = new ProjectNotePostLazyAdapter(currentActivity,
                entriesToShow);
        break;
    default:
        listViewAdapter = new ProjectNotePostLazyAdapter(currentActivity,
                entriesToShow);
    }

    if (listViewAdapter == null || listViewAdapter.getCount() == 0) {
        runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(getApplicationContext(),
                        "No Posts to Display", Toast.LENGTH_SHORT).show();
            }
        });
    }
    ListView listToFill = (ListView) findViewById(R.id.anyPosts);
    listToFill.setAdapter(listViewAdapter);

}

Это все, что он делает, когда щелкнуть по кнопке в любом журнале. Если я правильно это интерпретировал, когда все диалоги прогресса очистили экран, потоки фона закончились, и единственное, что запускается в потоке ui, помимо тостов в случае ошибок или неполной информации, - это настройка listview, который завершается. Когда я вытаскиваю ящик, он отображает правильный список сообщений.

EDIT Я обнаружил, что, если я прокомментирую диалог прогресса в методе updatePostList, он работает отлично. Итак, новый вопрос: почему в мире это решение?

Final Edit Я понял это. Этот диалог прогресса запускался из фонового потока. Изменен метод postEntry, поэтому он вызывает updatePostList в потоке пользовательского интерфейса, поэтому диалог выполнения создается в потоке пользовательского интерфейса, и он работает. Ура.

Теги:
back-button
slidingdrawer

1 ответ

1

Из вашего описания это похоже на то, что вы можете начать какой-то длительный процесс из основного потока. Выполнение чего-то вроде записи в файл, обновления базы данных или выполнения сетевого ввода-вывода в основном потоке приведет к тому, что она перестанет отвечать на запросы. Вы должны использовать Service или AsyncTask при выполнении таких операций.

Вот несколько статей, которые могут вам пригодиться:

  • 0
    Я изучал это, но дело в том, что у меня есть одна длинная задача, получение записей журнала проекта с сервера, которое обрабатывается в фоновом потоке и завершается до того, как я нажму кнопку «Назад». В потоке пользовательского интерфейса не выполняются никакие задачи, пока я не нажму кнопку «Назад» (о которой я знаю).
  • 0
    Вы можете разместить больше кода?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню