0

何か基本的なことが欠けているように感じます。実際、この質問をするのはちょっと恥ずかしいです。しかし、それは新しいプラットフォームを学び始めるときに起こることです...

CursorAdapter を介して入力される ListViewActivity があります。リスト アイテムがクリックされると、そのアイテムの詳細を表示する新しいアクティビティを開始します。私がやりたいことは、フリンジ/スワイプを有効にして、詳細アクティビティからアイテムを反復処理することです。List 内のアイテム数にハードコードされた制限がなく、無駄に思えるだけなので、ViewFlipper を完全に設定したくありません。フリング ジェスチャ/トラックボールの動きを傍受し、次/前のアイテムの詳細で詳細アクティビティをリセットする方法はありますか?

私の ListViewActivity は、適切なインテントで startActivity を呼び出す OnListItemClick を使用して、(managedQuery を介して) Cursor と関連する CursorAdapter を設定するだけです。

public final class ModelList extends ListActivity {

    private Cursor m_models = null;
    private ModelAdapter m_adapter;

    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(m_models == null) {
            m_models = managedQuery(Model.CONTENT_URI, Model.PROJECTION, null, null, Model.DEFAULT_SORT_ORDER);
        }
        m_adapter = new ModelAdapter(this, R.layout.modelitem, m_models);
        setContentView(R.layout.forcelist);
        setTitle(R.string.activity_list);
        setListAdapter(m_adapter);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Log.d(getPackageName(), "Clicked item id:" + id);
        if(id < 0) {
            startActivity(new Intent(Intent.ACTION_EDIT, Model.CONTENT_URI));
        } else {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Model.CONTENT_URI + "/" + id)));
        }
    }
}

私の詳細なアクティビティはかなり単純に思えます。これは、インテントの Uri に基づいて項目の詳細を表示するために設定された多数のビューを持つ単純な RelativeLayout です。

public class ModelDetail extends Activity {

    private Uri mUri;
    private FactionHelper factionHelper;
    private static String mCostFormat;
    private static String mDescriptionFormat;
    private ModelAdapter.MarAdapter marAdapter;

    @Override
    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.modeldetail);
        setTitle(R.string.activity_detail);
        mCostFormat = getBaseContext().getResources().getString(R.string.modelCostFormat);
        mDescriptionFormat = getBaseContext().getResources().getString(R.string.modelDescriptionFormat);
        mUri = getIntent().getData();
        factionHelper = new FactionHelper(getBaseContext());
        populateData();
    }

    protected void populateData() {

        TextView name = (TextView) findViewById(R.id.modelName);
        TextView description = (TextView) findViewById(R.id.modelDescription);
        // ... More finding Views and populating data ...
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        populateData();
    }

}
4

1 に答える 1

0

現在のレコードの ID を詳細アクティビティに渡すだけです。これにより、指定された ID の詳細が照会され、そのレコードの Cursor が取得されます。

次に、拡張するクラスを作成しますViewSwitcher(ユーザーは一度に 1 つの詳細しか表示できないため、一度に必要なビューは 2 つだけです)。カスタム ビュー スイッチャー クラスに、次のようなメソッドを追加します。

class MySwitcher extends ViewSwitcher {
    ...

    long currentRowId;
    long nextRowId;
    long previousRowId;

    public void setItemDetails(long rowId) {
        final View nextView = this.getNextView();

        currentRowId = rowId;
        /* Get the next/previous record IDs with a query like
         * "SELECT row_id FROM table WHERE row_id < "+currentRowId+" ORDER BY row_id DESC LIMIT 1;" (Previous)
         * "SELECT row_id FROM table WHERE row_id > "+currentRowId+" ORDER BY row_id ASC LIMIT 1;" (Next)
         */        

        // Do something with nextView, like set some text or something
        // You could get a cursor based on the rowID with
        // "SELECT * FROM table WHERE row_id = "+currentRowId+" LIMIT 1;"
        ((TextView) nextView.findViewById(R.id.myTextView)).setText("Details for item #" + rowId);
        this.showNext();
    }
}

アニメーションが最初に呼び出されたくない場合は、ViewSwitcher でsetItemDetails使用します。setAnimateFirstView(false)

次に、ドラッグ/スワイプを検出するために OnTouchListener を追加しsetItemDetails、水平スワイプを検出したときに次/前の行 ID で呼び出す必要があります。次または前に移動するかどうかに応じて、異なるアニメーションを設定することをお勧めします。アイテム。

于 2011-04-05T16:04:26.543 に答える