2012-04-23 15 views
2

私は1つのアクティビティから1つのアクティビティを別のアクティビティに渡そうとしていますが、その間に進行ダイアログが表示されます。主に、第2のアクティビティが情報を処理しているとき。私は読んでいて、それを行う正しい方法はasynctaskであるようです。それとももう一つの方法がありますか?私が使用してみましたアクティビティ/インテントへの進行ダイアログ

 public class DissertationActivity extends ListActivity { 
/** Called when the activity is first created. */ 

public ArrayList<String> book_Array = new ArrayList<String>(); 
ArrayAdapter<String> adapter; 

String href = ""; 
String href1 = ""; 
String search_Word = ""; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 



    Bundle extras = getIntent().getExtras(); 
    search_Word = extras.getString("query1"); 

    adapter = new ArrayAdapter<String>(this, R.layout.list_item_1, 
      book_Array); 
    setListAdapter(adapter); 

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

    try { 
     Document doc = null; 
     Document guestLink = null; 

     guestLink = Jsoup.connect("https://aulib.abdn.ac.uk:443/F").get(); 
     Element link = guestLink.select("p > a").first(); 
     href1 = link.attr("href"); 
     href = href1.substring(0, href1.length() - 2); // removes -0 from 
                 // the 

     // href_Array.add(href); //adds href to the array because string 
     // wont add to the public var. 
     doc = Jsoup.connect(
       href + "&request=" + search_Word 
         + "&find_code=WRD&adjacent=N&x=0&y=0").get(); 
     // System.out.println(doc); 
     Elements headings = doc.select("td:eq(3)"); 
     // System.out.println(headings); 
     for (Element heading : headings) { 
      // System.out.println(heading.text()); 
      String j = heading.text(); 

      book_Array.add(j); 

     } 

    } catch (IOException e) { 
     e.printStackTrace(); 

    } 

    book_Array.remove(0); 
    adapter.notifyDataSetChanged(); 
    book_Array.remove(1); 
    adapter.notifyDataSetChanged(); 
    book_Array.remove(2); 
    adapter.notifyDataSetChanged(); 
    book_Array.remove("Search"); 
    adapter.notifyDataSetChanged(); 
    book_Array.remove(" | "); 
    adapter.notifyDataSetChanged(); 
    book_Array.remove(0); 
    adapter.notifyDataSetChanged(); 

    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, 
       long id) { 
      // Context context = getApplicationContext(); 
      int query = position; 
      // String text = book_Array.get(position); 
      // int duration = Toast.LENGTH_SHORT; 
      // Toast toast = Toast.makeText(context, 
      // String.valueOf(position), //shows the postion in the array 
      // list 
      // duration); 
      // toast.show(); 

      Intent intent = new Intent(DissertationActivity.this, 
        FullDetailsActivity.class); 
      intent.putExtra("href", href); 
      intent.putExtra("query1", (int) query); 
      intent.putExtra("search_Word", search_Word); 

      startActivity(intent); 
     } 
    }); 

} 

} 

::これは第二の活動で活動1

public class SearchActivity extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 

    final EditText edittext = (EditText) findViewById(R.id.edittext); 
    edittext.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // If the event is a key-down event on the "enter" button 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) 
        && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
       // Perform action on key press 
       String query = edittext.getText().toString(); 
       // gets the text and makes sure its a string 
       Intent intent = new Intent(SearchActivity.this, 
         DissertationActivity.class); 
       intent.putExtra("query1", query); 
       startActivity(intent); 

       return true; 
      } 
      return false; 
     } 
    }); 

    final Button button = (Button) findViewById(R.id.searchButton); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String query = edittext.getText().toString(); 
      // gets the text and makes sure its a string 

      Intent intent = new Intent(SearchActivity.this, 
        DissertationActivity.class); 
      intent.putExtra("query1", query); 
      startActivity(intent); 

     } 
    }); 

} 
    } 

 this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", 
      true, false); 

しかし、それは動作しませんでした

は、ここに私のコードです。

どうすればアクティビティ間に進捗ダイアログが表示されるのですか?あなたの助けのための

ありがとう!

+1

なぜAsyncTaskを使用しないのですか?実装する方法は3つあります: 'onPreExecute' - 進行状況バーを表示します。 'onPostExecute' - 進行状況バーを削除します。 'doInBackground' - 何をすべきか。 – vtuhtan

+0

ちょうどヒントとして、あなたが記述した行の前にコメントを書くと、あなたのコードは読みやすくなります。そうすれば、人々は自分の頭で言語を解析しようとする前に何をしようとしているのかを知るでしょう。 – gobernador

+0

ダイアログはどこに表示されましたか?問題はダイアログが表示されないことですか? – dreamtale

答えて

0

ProgressDialog.showを呼び出すと、UIスレッドがブロックされます。したがって、メソッドが返されるまで進捗ダイアログ/バーは表示されません。そこで、メソッド内で実行するスレッドを作成することができます。これにより、メインのUIスレッドがブロックされなくなります。 サンプルコード -

ProgressDialog spinnerDialog = ProgressDialog.show( 
Placeholder.this, "","Your text ", true); 
new Thread(new Runnable() { 
public void run() { 
    //your method code 
    return; 
} 
}).start(); 
+0

私はコードを使ってみましたが、正しい場所にいるかどうかわかりません。進行状況ダイアログが表示されますが、数秒後にアプリケーションがクラッシュします。私は、 ProgressDialog spinnerDialog = ProgressDialog.show( \t \t \t \t DissertationActivity.this、 ""、 "Your text"、true);を入れます。 \t \t \t \t新しいスレッド(新しいRunnableを(){ \t \t \t \tます。public void実行(){ ライン48上のsetListAdapterは、理想的に動作するはずですよね? – Tbuermann

+0

は。あなたはまた、睡眠を追加できることをされた直後あなたが進捗ダイアログを表示したい時間を記述するrunメソッドの最初の行としてのステートメント – 22kar

関連する問題