我幾乎沒有使用android的經驗。拖放列表視圖
我試圖做一個拖動+拖放感知列表視圖,因爲各種其他解決方案不做客戶需要的東西,這個項目可能會讓我做很多其他「有趣」的拖拽這樣的事情有一段時間很滑稽。
需求很簡單:用戶可以使用android drag + drop 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;
}
}
我的直覺告訴我,做一拖+下拉列表應該比這個更簡單,考慮到由機器人UI支持的功能「廣度」。但是,這也是Java,所以我不期待直接的答案。
Commonsguy也有一個:https://github.com/commonsguy/cwac-touchlist – FoamyGuy 2013-05-10 03:44:16