2011-12-28 14 views
0

私は、Androidに新しいですし、ここで私は建築についての質問があります:アンドロイド、リストビューと活動アーキテクチャ

私はソーシャルネットワーククラスのリストビューを表示する活性を有し、各ソーシャルネットワークのクラスは通常のクラスである(ありませんアクティビティ)を使用して、ログインメソッドを持つインターフェイスを実装します。したがって、ListViewから1つのソーシャルネットワークをタップすると、選択したネットワークのログインメソッドが呼び出され、そのメソッドは、そのネットワークのログインサイトでWebビューを表示して、Oauthトークンを取得するアクティビティを呼び出す必要があります。アプリケーションを許可すると、WebViewを閉じてListViewのItemに、選択したネットワークのユーザがログに記録されていることが表示されます。

私の質問は次のとおりです: 通常のクラス(アクティビティではありません)がアクティビティを呼び出すと、Webviewを開くことができますか?どうやって? そして、そのクラスはどのようにしてActivityの結果をリッスンし、それを更新するためにListViewを表示するActivityにそのレスポンスを送信できますか? そのアーキテクチャは大丈夫ですか?私はより良い、よりエレガントな方法でなければならないと思いますか?

ありがとうございます!

答えて

1

私はあなたのために最善の方法は、 ActivityからWebViewを表示するActivityを開始することだと思います。 startActivityForResult()メソッドを使用してWebViewアクティビティを開始し、結果をonActivityResult()で聞くことができます。

thisページで確認することができます。

Activity Class以外からアクティビティを開始する場合は、Application Context Providerを作成し、アプリケーションコンテキストを使用してアクティビティを開始する必要があります。アクティビティー以外のクラスからアクティビティーを開始するときは、NEW_TASKフラグを設定する必要があることに注意してください。問題は、あなたがこのような方法でアクティビティを開始した場合、あなたがonActivityResult()メソッドを呼び出すことができないと思います。

+0

こんにちは@Cata、あなたの答えに感謝します。私が最初のやり方でそれを行うなら、私はそのリストビューアクティビティで各ソーシャルネットワークの実装を行う必要があります、それのログインを処理する各ソーシャルネットワークのクラスを持っているという考えを失った、または私はまだそれを行うことができますか? – Spike777

+0

あなたの歓迎:)! – Cata

+0

完全な回答を投稿する前に私は誤ってクリックしました:p – Spike777

0

WebViewはViewから継承されているため、アクティビティのレイアウト構造にある必要があります。あなたが望むなら、Webログインを処理するためには、ビルドとアクティビティが必要です。

startActivityForResultを使用すると、アクティビティの結果が開始されたことを示し、その後setResultを使用して結果を返すことができます。

0

アクティビティを呼び出すためには、コンテキストが必要です。アクティビティーではなくアクティビティーの一部であるクラスが必要で、その権限を持つクラスが必要な場合は、そのクラスにコンテキストを渡す必要があります。そのクラスが何らかの形でポストアクティビティーのまま残っていると、コンテキストをリークする可能性があることに注意してください。

関連する問題