2

私はアンドロイドの経験がほとんどありません。

他のさまざまなソリューションではクライアントが望んでいることを実行できないため、ドラッグ アンド ドロップ対応のリスト ビューを作成しようとしています。これでしばらく。

要件は単純です。ユーザーは、android のドラッグ アンド ドロップ API を使用して、リストから何かをドラッグして別の場所にドラッグできます (それを呼び出した場合)。言われたことがリストビューや長押しなどを傍受するものでない限り、それは機能します。

これまでのところ機能していないものは次のとおりです。

package blah;

import android.os.*;
import android.app.*;
import android.content.*;
import android.util.*;
import android.view.*;
import android.view.View*;
import android.widget.*;

public class ListFragment extends Fragment
{
    public static class ItemView extends TextView
    {
        public int position;

        public ItemView(Context context, AttributeSet attrs)
        {
            super(context,attrs);
        }
    }

    private class _Adapter extends BaseAdapter
    {
        private Activity _activity;

        @Override
        public int getCount()
        {
            // TEST: Make it go
            return 16;
        }

        @Override
        public Object getItem(int arg0)
        {
            return null;
        }

        @Override
        public long getItemId(int arg0)
        {
            return 0;
        }

        @Override
        public View getView(int position, View convert, ViewGroup parent)
        {
            LayoutInflater inflater = (LayoutInflater)this._activity.getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE
                    );

            ItemView itemView = (ItemView)inflater.inflate(R.layout.list_item_view,parent,false);

             // TEST: Just display positions
            itemView.setText(Integer.toString(position));

            itemView.setOnClickListener(new _ItemClickListener());

            itemView.setOnDragListener(new _ItemDragListener());

            itemView.position = position;

            return itemView;
        };

        public _Adapter(Activity activity)
        {
            this._activity = activity;
        }
    }

    private class _ItemDragListener implements OnDragListener
    {
        @Override
        public boolean onDrag(View view, DragEvent event)
        {
            ItemView targetItemView = (ItemView)view;

            int action = event.getAction();

            switch(action){
            case DragEvent.ACTION_DROP:
                {
                    // not really sure which is which here, since nothing works
                    ItemView sourceItemView = (ItemView)event.getLocalState();

                    Log.d("DERP",
                            "DROPPED " + Integer.toString(sourceItemView.position) +
                            " ONTO " + Integer.toString(targetItemView.position)
                            );
                }break;
            }
            return true;
        }
    }

    private class _ItemClickListener implements OnClickListener
    {
        @Override
        public void onClick(View view)
        {
            ItemView itemView = (ItemView)view;
            Log.d("DERP", Integer.toString(itemView.position) + " WAS CLICKED");

            // nothing happens here
            view.startDrag(
                ClipData.newPlainText("",""),
                new View.DragShadowBuilder(view),
                view,
                0
                );
        }

        public _ItemClickListener()
        {
        }
    }

    private Activity _activity;

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        this._activity = activity;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        ListView listView = (ListView)inflater.inflate(R.layout.list_fragment, container, false);

        listView.setAdapter(new _Adapter(this._activity));

        return listView;
    }
}

私の直感では、Android UI でサポートされている機能の「幅」を考えると、ドラッグ アンド ドロップ リストの作成はこれよりも簡単であるはずです。ただし、これもJavaなので、簡単な答えは期待できません。

4

3 に答える 3

1

Google 公式ビデオ学習チュートリアル からこのコードを試してください。 Google DEVByte

于 2013-11-07T12:59:07.110 に答える
0

ライブラリ呼び出しdrag-sort listviewがあります。あなたはそれをチェックアウトする必要があります。

于 2013-05-10T03:42:06.550 に答える