1

ViewPager 内にカスタム レイアウトを持つ ListFragment があります。この ListFragment とカスタム レイアウトは、AsyncTask を呼び出す ListView と Button を実行します。

作業が完了すると、この AsyncTask は onPostExecute で refresh メソッド (ListFragment 内で作成) を呼び出して、アダプターを更新します (以下のコード)。このボタンを押すと、方向の変更が発生するまですべて正常に動作します

次に、ボタンを押すと、リストは更新されますが、行は追加または削除されません。つまり、行が 1 つしかなく、アダプターを更新した後に空の場合、リストに変更はありません。一方、いくつかの行をリストに追加する必要がある場合、既存の行の内容が変更されていることに気付くだけです。

この「失敗した」更新の後に方向の変更が発生した場合、リストは正常に表示されます。したがって、リストは向きの変更後にのみアダプターのコンテンツを適切に更新すると言えます。

メイン アクティビティへの参照は常に ListFragment に渡され、アダプターは適切に更新されます(ログで確認しました)。

誰でも何か考えがありますか?とても感謝します。

レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:weightSum="10">

    <ListView android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="9" />

    <Button android:id="@+id/Refresh" 
        android:layout_width="wrap_content" 
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:text="Update" /> 

</LinearLayout>

そしてコード:

    public class ResFragment extends ListFragment {
    View view = null;
    public static AdapterRes adapter; 

    public static ArrayList<NodeP> mItems = new ArrayList<NodeP>();
    public static MyAppActivity ref ;   


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new AdapterRes(ref, ref.result);
        adapter.notifyDataSetChanged();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.result,null);
        this.setListAdapter(adapter);

        Button refresh = (Button) view.findViewById(R.id.Refresh);
        refresh.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ref.initDownloadTask();             
            }
        });

        return view; 
    }

    public void refresh(){ 
        mItems.clear();
        adapter = new AdapterRes(ref, ref.result);
        this.setListAdapter(adapter);
        adapter.notifyDataSetChanged();
    }

    class AdapterRes extends ArrayAdapter<NodeP> {

      Activity context = ref;
      AdapterRes(Activity context, List<NodeP> objects) {
          super(context, R.layout.row_res, objects); 
          this.context = ref;   
      }

      @Override
      public View getView( final int position, View convertView, ViewGroup parent) 
      {
          View item = convertView; 
          final ViewHolder holder;

          if(item == null)                                    
          {                                                  
              LayoutInflater inflater = context.getLayoutInflater();            
              item = inflater.inflate(R.layout.row_res, null);

              holder =  new ViewHolder();   

              holder.local = (TextView)item.findViewById(R.id.local);
              holder.resPartido = (TextView)item.findViewById(R.id.res);
              holder.foreign = (TextView)item.findViewById(R.id.foreign);

              item.setTag(holder); 
          }
          else                                        
          {                         
              holder = (ViewHolder)item.getTag(); 
          }
          holder.local.setText(ref.result.get(position).local);   
          holder.res.setText(ref.result.get(position).res);
          holder.foreign.setText(ref.result.get(position).foreign);
          return(item); 
      }

      public class ViewHolder {
          public TextView local;
          public TextView res;
          public TextView foreign;
      }

    }
}
4

0 に答える 0