0

独自のデータを含む 2 つの ListViews があります。

ユーザーが最初の項目のいずれかのボタンをクリックすると、ListViewデータの変更が発生し、2 番目の項目にListView通知する必要があります。しかし、私はこれを機能させることができないようです。簡略化された関連コードの下:

これが最初の ListFragment です。AsyncTask 内では、最初のカスタム ListAdapter が during で設定さsetListAdapter()onPostExecute()ます。

public class FragmentAListSupport extends SherlockListFragment {
    String url = "omitted";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);         
        AsyncTask<String, Integer, String[]> asynctask = 
            new DownloadFilesTask(this).execute(url);       
    }
}

これは 2 番目の ListFragment です。AsyncTask 内で、2 番目のカスタム ListAdapter が during で設定さsetListAdapter()onPostExecute()ます。

public class FragmentBListSupport extends SherlockListFragment {
    String url = "omitted";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);         
        AsyncTask<String, Integer, String[]> asynctask = 
            new DownloadDataTask(this).execute(url);        
    }
}

最初の ListFragment (A) で使用されるカスタム アダプター内には、onButtonPressed ハンドラーがあります。

  @Override
  public View getView(final int position, View convertView, ViewGroup parent) {
  //code omitted
  viewHolder.button
    .setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View buttonview) { 
            //code omitted that changes some local data 
            //I need to notify the other ListFragment (B) here that it should update 
        }             
     {    
   }

今、私の質問のために...

最初のアダプター (A) 内から notifyDataSetChanged() を正しく使用して、ListView を更新する必要があることを 2 番目のアダプター (B) に通知するにはどうすればよいですか? どちらも AsyncTask 内で初期化されているため、最初のアダプター内から 2 番目のアダプターへの正しい参照を取得する方法について混乱しています。

どんな助けでもいいです!

4

1 に答える 1

0

次のようなことを試してみてください。

1 つのフラグメントから、アダプターのインスタンスを返すメソッドを作成します。

  public customAdapter getDataAdapter()
  {
       return dataAdapter;
  }

2 番目のフラグメントで、最初のフラグメントのインスタンスを取得します。

firstfragment.getDataAdapter().clear();
firstfragment.getDataAdapter().addAll(allDataSet);
于 2013-03-06T00:03:20.040 に答える