3

画面の向きについて多くの投稿を行いました。しかし、私のシナリオは少し異なります。私の ListView にはカスタムの行レイアウトがあります。ImageView ビットマップが AsyncTask を使用してインターネットから読み込まれます。私が望むのは、ListViewのArrayAdapterまたはListView全体を保存して、画面の向きが変わってもその状態が保持されるようにすることです。

いくつかの投稿を提案するか、いくつかのコードが投稿されている場合、それは非常に役立ちます.

public View getView(int position, View convertView, ViewGroup parent) {
        final Contents entry = contentList.get(position);
        View row = convertView;
        LayoutInflater infltr = null;
            if (row == null) {
                infltr = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.highlight_contents_layout,
                        parent, false);
        }

            ImageView imgViewImage = (ImageView) row
                    .findViewById(R.id.imgView_Image);
            if (imgViewImage.getTag() == null) {
                new DownloadImage(imgViewImage, entry).execute(); //Async Task to download Image
            }

        }
        return row;
    }

そしてonCreateには、関数呼び出しが次のリストに入力するための関数呼び出しがあります。

init(){
listContent = (ListView) findViewById(R.id.listview); //vairable declared at top of my class;
contentlist = new ArrayList<Contents>(); //Variable Declared at top of class;

//... Populated the contenlist... in here
//..
//..
adapter = new ListAdapter(getApplicationContext(),
                R.layout._contents_layout, contentList,
                thumb_image_bytes);
        listContent.setAdapter(adapter);
        adapter.notifyDataSetChanged();
}
4

3 に答える 3

2

onRetainNonConfigurationInstance()メソッドListViewを使用して、状態を保持できます。このメソッドは、向きの変更中にアクティビティが破棄される前に実行され、リスト アダプターなど、必要なオブジェクトを返すことができます。レター、メソッド内で);を呼び出すことでオブジェクトを復元できます。onCreate()getLastNonConfigurationInstance(

たとえば、アクティビティにフィールドを作成しますmAdapter。そのフィールドには、リスト アダプターへの参照が保持されます。次のようにオーバーライドonRetainNonConfigurationInstance()します。

@Override
public Object onRetainNonConfigurationInstance() {
    return mAdapter;
}

onCreate()メソッドでリストアダプターを復元します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mList = (ListView) findViewById(android.R.id.list);

    Object obj = getLastNonConfigurationInstance();

    if(null != obj){//if there is saved adapter - restore it
        mAdapter = (ArrayAdapter<String>)obj;
    } else { //if not - create new one
        mAdapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_1, listData);
    }
        mList.setAdapter(mAdapter);
}

編集:

これは私には良くありません:

ImageView imgViewImage = (ImageView) row
                    .findViewById(R.id.imgView_Image);
      if (imgViewImage.getTag() == null) {
           new DownloadImage(imgViewImage, entry).execute(); //Async Task to download Image
}

imgViewImage.getTag()false を返すかどうかを確認してください。リストをスクロールしているときに実行されるため、イメージャーなしでリスト項目を取得できるため、実行AsyncTaskgetView()ないでください(と思います)。

于 2012-07-29T21:26:05.067 に答える
1

ダウンロードしたデータを変数に保存し、向きが変わったら、保存されたデータで要素をリロードしないでください。このリンクは、画面の向きの変更イベントをキャッチするのに役立ちます。

于 2012-07-29T20:44:42.857 に答える
-3

私はあなたが何を求めているのか100%確信が持てません。ただし、特定の値に固定されるように方向を設定できます。リスト ビューの向きを変更するという問題があったため、縦向きモードでのみ出力が生成されるように向きを修正しました。

オプションとしてアクティビティタグ内にこのタグを追加しました

<activity android:name="preferences.Preferences" android:screenOrientation="portrait"></activity>. 

これがあなたが探していた答えであることを願っています。これにより、状態が保持されます。これがあなたの質問に答えない場合。今後ともお役に立てますよう努めて参ります。

于 2012-07-29T20:33:37.277 に答える