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;
}
}
}