0

すべてのActionタイプの異種アイテムのリスト用のアダプターがあります。

ActionAdapter.java

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ActionAdapter extends ArrayAdapter<Action> {
    Context context; 
    int layoutResourceId;    
    ArrayList<Action> actions = null;

    public ActionAdapter(Context context, int layoutResourceId, ArrayList<Action> actions) {
        super(context, layoutResourceId, actions);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.actions = actions;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ActionHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(actions.get(position).getViewId(), parent, false);

            holder = new ActionHolder();
            holder.title = (TextView)row.findViewById(R.id.action_title);

            row.setTag(holder);
        }
        else
        {
            holder = (ActionHolder)row.getTag();
        }

        Action action = actions.get(position);
        holder.title.setText(action.getTitle());

        return row;
    }

    static class ActionHolder
    {
        TextView title;
    }
}

アクションは抽象クラスであるため、actions.get(position).getViewId()そのアクションに適切なレイアウトを取得すると、全員が異なるフィールド (テキストビュー、編集テキストなど) を持つようになります。

ユーザーにアクションを動的に追加/削除させ、画面の回転などでリストを維持したい.android:configChanges="orientation|screenSize"マニフェストに追加できることがわかったが、ドキュメントにはそれが最後の手段であるべきだと書かれている.

これに対する最善のアプローチは何ですか?つまり、そのタグをマニフェストに保持する必要がありますか、それともリストをデータベースにバインドする方がよいでしょうか? 後者の場合、異なるフィールドを持つアクションをどのように処理できますか?

そして、リストを永久に保存するためのより堅牢な方法は何ですか? たとえば、ユーザーが将来の使用のためにそのようなアクションリストをテンプレートとして保存できるようにしたいと思います

私がより良い方法で何かを行うことができると思われる場合 (たとえば、ArrayAdapter の代わりに BaseAdapter を拡張するなど)、その理由を説明してください。私は変更に対してオープンマインドです。

4

0 に答える 0