0

Android アプリの場合...カスタム ListActivity を呼び出すアクティビティにボタンがあります。この ListActivity には、2 行のテキストとチェックボックスがあります。呼び出されると、ListActivity はデバイス上の XML ファイルを開きます ( local.xml) 。この XML ファイルには、Web 上のターゲット XML ファイルのリストが含まれています。ファイルがデバイスに存在する場合、ListActivity のチェックボックスがチェックされます。存在しない場合はチェックされません。

ListItem が押されると、ターゲット ファイルがデバイス上に存在するかどうかが確認されます。存在する場合は、上書きするかどうかを確認するダイアログ ボックスが表示されます。ファイルが存在しない場合、または上書きを選択した場合は、インターネットにアクセスして一連のファイルを取得するときに進行状況ダイアログが表示されます (ターゲット XML ファイルには、収集する JPEG のリストが含まれています)。

JPEG をダウンロードした後、進行状況のメッセージを変更して、すべての JPEG がダウンロードされたかどうかを示します。数秒間スリープしてから消えます。

上記のすべての作品。

私の質問は次のとおりです。

  1. 完了後、すべての JPEG がダウンロードされたかどうかに基づいて、押されたアイテムに関連付けられたチェックボックスを設定するにはどうすればよいですか?

  2. 色を黄色に変更できない限り、バイナリであるチェックボックスの代わりにトライステートインジケーターが本当に欲しいです。ここで使用すべきより良いウィジェットはありますか?

関連するコードは次のとおりです (詳細が必要な場合はお知らせください)

初期アクティビティ:

public class RRS_Preferences extends Activity {
    onCreate(yadda, yadda)  {
}

public void Button_Listener(View view)  {
    /* open up the ListView Activity */
    Intent myIntent = new Intent();
    myIntent.setClassName("com.sinisterlabs.mypackage", "com.sinisterlabs.mypackage.Download_List");
    startActivity(myIntent);
    }
}

カスタム リスト アクティビティ:

public class Download_List extends ListActivity {
    List<Location>loc_list = new ArrayList<Location>();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new RRSList_ArrayAdapter(this));
        selection = (TextView)findViewById(R.id.tableRow1);

        /* Open the "local.xml" file, pull from it the list of files that need to go
        onto the ListActivity. For each file, I add it to the List.  */
        loc_list.add(new Location(stringLocalFilename, stringURL, booleanIsPresent));
    }

    protected void onListItemClick(final ListView parent, final View v, int position, long href)    {
        if (fileLocalFile.exists)   {
            subDownloadJPegs(fileLocalFile);

        } else {    // Ask to download or not?
            AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
            alertBuilder.setMessage("Are you sure you want to OverWrite this file and all of its image files?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                        subDownloadJPegs(fileLocalFile);
                        }
                    });
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                        Toast.makeText(getApplicationContext(), "OverWrite Operation Cancelled...", Toast.LENGTH_LONG).show();
                        }
                    });
            AlertDialog alert = alertBuilder.create();
            alert.show();
        }
    }

    private void subDownloadJPegs(fileLocalFile)    {
        progDialog = new ProgressDialog(this);
        progDialog.setCancelable(true);
        progDialog.setMessage("Downloading files for " + fileLocalFile.toString() + "...");
        progDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progDialog.setProgress(0);
        /* open up this file and count the number of JPegs to be downloaded */
        progDialog.setMax(intMax);
        progDialog.setMessage("Downloading Sign Files for " + RuleSetName + "...");
        progDialog.show();

        /* background thread to update progress bar */
        Thread background = new Thread (new Runnable() {
        @Overide
        public void run() {
            /* Inside a loop, download each file, increment the progress bar as we do */
            progressHandler.sendMessage(progressHandler.obtainMessage());
        }
        background.start();
    }

    Handler progressHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            progDialog.incrementProgressBy(1);
        }
}

リスト アイテム レイアウト XML:

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

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:clickable="false"
        android:focusable="false"
        android:gravity="center" />

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView android:id="@+id/text1" 
            android:layout_width="fill_parent" 
            android:layout_height="20dp" 
            android:textSize="18dp"></TextView>

        <TextView android:id="@+id/text2" 
            android:layout_width="fill_parent" 
            android:layout_height="15dp"
            android:textSize="13dp"></TextView>

    </LinearLayout>
</LinearLayout>

ありがとう!!!

4

1 に答える 1

0

はい、分かりました。問題は、ダイアログ ボックスを閉じるための呼び出しを行った場所でした。それは catch ステートメント内で終了し、実行されませんでした。これを修正する際に、ハンドラーへの呼び出しもパラメーター化したので、より明確になりました。

うわぁ!:-)

于 2012-09-19T22:03:52.087 に答える