2

フラグメントを使用してリスト ビューを作成しましたが、いくつか問題があります。下の画像を確認してください。

ここに画像の説明を入力してください

画面が回転したときにのみ発生します。私のコードは以下の通りです:

public class LListFragment extends SherlockListFragment {

    private String[] line;

    public static final String[] TITLES = { "Henry IV (1)", "Henry V",
            "Henry VIII", "Richard II", "Richard III", "Merchant of Venice",
            "Othello", "King Lear" };

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, TITLES));
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(getActivity(), lineDetail.class);
        intent.putExtra("selected_line", "" + TITLES[position]);

        startActivity(intent);
        super.onListItemClick(l, v, position, id);
    }

}

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

ListFragment同様のレイアウトに使用していますが、この問題は発生していません。Adapterリストアイテムに独自のものを使用してみてください。このようなもの

public class MyAdapter extends BaseAdapter {
    @SuppressWarnings("unused")
    private static final String TAG = MyAdapter.class.getSimpleName();

    private List<String> _items;
    private LayoutInflater inflater;

    public MyAdapter(List<String> items, Context context) {
        _items = items;
        inflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return (_items != null) ? _items.size() : 0;
    }

    public Object getItem(int position) {
        return (_items != null) ? _items.get(position) : null;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.your_item_layout, null);
        }

        ((TextView)convertView.findViewById(R.id.itemText)).setText(_items.get(position));

        return convertView;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }


    public synchronized void refresAdapter(List<String> items) {
        _items.clear();
        _items.addAll(items);
        notifyDataSetChanged();
    }
}

- - 編集 - -

これが私のコードですListFragment

public class HomeListFragment extends ListFragment implements DataListener {

    private MyAdapter _adapter;
    private Context _ctx;

    public HomeListFragment(){}

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        _ctx = getActivity();

        initialize();
    }

    private void initialize() {
        _adapter = new MyAdapter(new List<String>(), _ctx);

        setListAdapter(_adapter);

        final SomeServiceHandler s = new SomeServiceHandler(_ctx, HomeListFragment.this);
        s.request(RequestType.GETSOMEDATA, "");
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        //do stuff
    }

    /**
    * Listener method that is invoked by SomeServiceHandler
    */
    public void onResponseRecieved(List<String> responseList) {
        _adapter.refresAdapter(responseList);
    }
}

私があなたとは違うことをしていることがわかる唯一のことは、アクティビティがクラスを呼び出して再度作成された後、メソッドSomeServiceHandlerの応答で更新してアダプターを更新していることです。onResponseRecieved

于 2013-06-07T07:36:58.723 に答える
0

画面が回転したときにのみ発生します。

フラグメントを実行するアクティビティの一部として、これをメインフェストに入れます。アプリで使用して、画面が回転したときに奇妙なことが起こらないようにしました。

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

完全な Activity 宣言は次のようになります。

<activity
    android:name=".ActivityName"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
于 2013-09-21T15:32:46.237 に答える