私はアンドロイドの経験がほとんどありません。
他のさまざまなソリューションではクライアントが望んでいることを実行できないため、ドラッグ アンド ドロップ対応のリスト ビューを作成しようとしています。これでしばらく。
要件は単純です。ユーザーは、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なので、簡単な答えは期待できません。