2011-04-07 10 views
0

こんにちは私は、ログイン後に、リストビューを含む3つのタブを持つタブホストを含​​むメインアクティビティを読み込みます。各タブは、sqlite +カスタムアダプタを介して生成されます。データベースは、最初にxmlデータ(sqliteデータベースに非同期に同期される)を介して生成されます。親アクティビティからリフレッシュタブリストビュー

私の問題: sqliteデータベースをXMLデータで手動で同期させて、現在のタブリストビューを更新できるようにします。私はデータベースのバックグラウンド更新を行うためにうまく動作する非同期スレッドを持っています。私が把握できないのは、現在のタブのリストビューを強制的に更新する方法です。問題は、親アクティビティからtabhost内のサブアクティビティにアクセスする方法がわかりません。

notifyDataSetChanged()が必要ですが、これを行うにはタブのアクティビティ>アダプタにアクセスする方法を理解できません。 notifyDataSetChanged()を呼び出すためにサブアクティビティアダプタにアクセスするにはどうすればよいですか?親(包含)アクティビティには、タブホストのリストビューを更新するためのボタンがあります。

代替手段:バックグラウンドスレッドのonPostExecute()コールバックからインテントをブロードキャストしようとする可能性があります。つまり、xmlデータを使ってデータベースを更新すると、タブがブロードキャストを受信し、notifyDataSetChanged()を介してリフレッシュするようトリガーします。これはおそらくブロードキャスト/受信インテントの設計方法ではありませんか?すなわち、アクティビティと含まれているタブのリストビューアクティビティ間の通信?

これはスタックオーバーフローに関する2番目の投稿です。私の説明ではっきりしていれば幸いです。私はこの問題に取り組んで以来、久しぶり :あなたは

EDIT(16-JAN-2012)を提供することができます任意のヘルプやアドバイスをありがとう。私はもともと、インテントをブロードキャストし、それを子アクティビティで消費するソリューションを使用しました。しかし、私は以来、多くの人から助言を受けてきました。代わりにタブ内のアクティビティを使用して停止しました。私は今、タブ内のビューを使用しています。これははるかに優れたクリーナーです。

コードが煩雑になるのを除けば、縦横比から回転を外したときにも、アクティビティ間を移動するときに「データベースが閉じられていません」というタイプのエラーが発生していました。アクティビティではなくタブ内のビューで多くの問題が修正されました。

+0

しかし、タブビュー内でリストビューをどのように更新しましたか? – Shrikant

答えて

2

は、私はちょうど "" ソリューションを実装し終えました。私は基本的に上記の放送の意図とは別のものを使いました。

私のAsyncTaskタスクのonPostExecute()メソッド(これは、XMLとデータベースのバックグラウンド同期を行います)では、他の誰かがこのようにしたいと思っています。

@Override 
public void onResume(){   
     IntentFilter filter = new IntentFilter("com.myapp.app.DATA_REFRESH"); 
     updaterBroadcastReceiver r = new updaterBroadcastReceiver(); 
     registerReceiver(r,filter); 

     super.onResume(); 
} 

public class updaterBroadcastReceiver extends BroadcastReceiver {  
     @Override 
     public void onReceive(Context context, Intent intent) { 
      fillData(); // rebuild my listview with new database data 
     } 
} 

登録/セットアップで上記の目的の受信機を:私はその放送の意図を受け取る> tabhost内すると

@Override 
    protected void onPostExecute(Integer result) { 
     Intent i = new Intent("com.myapp.app.DATA_REFRESH"); 
     sendBroadcast(i); 

    }  

タブの活動を:私はテントブロードキャストを上げます

FillData()は、データベースからの新しいデータでリストビューを更新するために使用されます。

誰かが私に教えてくださいこれを行うより良い方法についての提案があれば私に教えてください。私はアンドロイドにはかなり新しいです。

乾杯、 ロブ

-1

この記事を参照してください:

http://www.codegod.de/WebAppCodeGod/aendroid-ImageButtons-in-ListView-with-RelativeLayout-AID589.aspx

特にこのライン tableRowAdapter.notifyDataSetChanged();

に関して、 マティアス

+0

こんにちはマティアスは素早い返答をありがとう。うん、私はすでに私がnotifyDataSetChanged()が必要と思ったと述べたように私の問題はどのように私はtabhostのアクティビティ内のアダプタでそれを呼び出すのですか? – wired00

1

thisスレッドを見てください。

私はTabHostのイベントでタブをリフレッシュしたいのと同じような問題を抱えています。私はすべての自分のSub(Tab)アクティビティを実装し、TabHostからサブ(Tab)アクティビティ用のメッセージを呼び出すInterfaceを定義しました(投稿されたonTouch()メソッドを見てください)。

+0

ありがとうKClaszen、それはあなたがサブタブの活動の文脈をどのように得るかよく見えます。私はそれを行うように私の方法を変更しようとすることができます(すなわち 'View currentView = getTabHost()。getCurrentView(); Context currentViewContext = currentView.getContext();'インテントブロードキャスト/受信を使って何かをすることに不利益があると思いますか?私はあなたと同じように実装していますか?私はあなたをマークアップしますが、十分な評判はありません:) – wired00

+0

@ wired00残念ながら私はまだインテント放送を使用しておらず、この解決策についてはコメントできません。 – FrVaBe

関連する問題