diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/Flur/FlurFragment.java b/app/src/main/java/de/jg_cody/Teraplex/ui/Flur/FlurFragment.java index be6b25a..21ab514 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/Flur/FlurFragment.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/Flur/FlurFragment.java @@ -18,9 +18,14 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.Base64; import java.util.Objects; @@ -37,11 +42,10 @@ public class FlurFragment extends Fragment implements AddButtonDialogSingle.AddB private FlurViewModel flurViewModel; - String[] commands = {"Hello1","Hello2","Hello3","Hello4","Hello5"}; int[] type = {0,1,0,0,1}; - ListView listView; + RecyclerView listView; ListAdapter listAdapter; ArrayList items; @@ -73,9 +77,41 @@ public class FlurFragment extends Fragment implements AddButtonDialogSingle.AddB - listAdapter= new ListAdapter(getContext(), R.id.text, items); + listAdapter= new ListAdapter(getContext(), items); + listView.setLayoutManager(new LinearLayoutManager(getContext())); listView.setAdapter(listAdapter); + ItemTouchHelper h = new ItemTouchHelper(new ItemTouchHelper.Callback() { + @Override + public int getMovementFlags(@NonNull @NotNull RecyclerView recyclerView, @NonNull @NotNull RecyclerView.ViewHolder viewHolder) { + int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(@NonNull @NotNull RecyclerView recyclerView, @NonNull @NotNull RecyclerView.ViewHolder viewHolder, @NonNull @NotNull RecyclerView.ViewHolder target) { + //listAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + listAdapter.swap(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return true; + } + + @Override + public void onSwiped(@NonNull @NotNull RecyclerView.ViewHolder viewHolder, int direction) { + } + + @Override + public boolean isLongPressDragEnabled() { + return true; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return false; + } + }); + h.attachToRecyclerView(listView); + FloatingActionButton addfab = root.findViewById(R.id.addbutton_fab); addfab.setOnClickListener(new View.OnClickListener() { @Override @@ -105,7 +141,6 @@ public class FlurFragment extends Fragment implements AddButtonDialogSingle.AddB } else if (i == 3) { listAdapter.add(new ListItemSpace(3)); listAdapter.notifyDataSetChanged(); - } dialogInterface.dismiss(); diff --git a/app/src/main/java/de/jg_cody/Teraplex/ui/rooms/ListAdapter.java b/app/src/main/java/de/jg_cody/Teraplex/ui/rooms/ListAdapter.java index 9358c3c..edc712d 100644 --- a/app/src/main/java/de/jg_cody/Teraplex/ui/rooms/ListAdapter.java +++ b/app/src/main/java/de/jg_cody/Teraplex/ui/rooms/ListAdapter.java @@ -8,92 +8,140 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Collections; import de.jg_cody.Teraplex.R; -public class ListAdapter extends ArrayAdapter { +public class ListAdapter extends RecyclerView.Adapter { - public static int SINGLEBUTTON = 0; - public static int DOUBLEBUTTON = 1; - public static int HEADLINE = 2; - public static int SPACE = 3; + public static final int + SINGLEBUTTON = 0, + DOUBLEBUTTON = 1, + HEADLINE = 2, + SPACE = 3; - private ArrayList objects; + private Context context; + private LayoutInflater inflater; + private ArrayList objects; + public ListAdapter(Context context, ArrayList objects) { + //super(context, resource, objects); + this.context = context; + this.inflater = LayoutInflater.from(context); + this.objects = objects; + } - @Override - public int getViewTypeCount() - { - return 4; + @NonNull + @NotNull + @Override + public ListItemViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) { + return new ListItemViewHolder(createView(viewType, parent)); + } - } - public int getItemViewType(int position){ - return objects.get(position).getType(); - } + @Override + public void onBindViewHolder(@NonNull @NotNull ListItemViewHolder holder, int position) { + bindView(holder.getItemView(), objects.get(position)); + } - public ListAdapter(Context context, int resource, ArrayList objects) - { - super(context, resource, objects); - this.objects = objects; + public int getItemViewType(int position) { + return objects.get(position).getType(); + } - } - @SuppressLint("InflateParams") - @NotNull - @Override - public View getView(int position, View convertView, @NotNull ViewGroup parent) { + @Override + public int getItemCount() { + return objects.size(); + } - IViewHolder viewHolder = null; - ListItem listViewItem = objects.get(position); - int listViewItemType = getItemViewType(position); + public void add(ListItem item) { + objects.add(item); + } - String[] s = listViewItem.getStrings(); - if (convertView == null) { + public void swap(int idx1, int idx2) { + Collections.swap(objects, idx1, idx2); + notifyDataSetChanged(); + } - if (listViewItemType == SINGLEBUTTON) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.singlebutton, null); + public View createView(int listViewItemType, ViewGroup parent) { + switch(listViewItemType) { + case SINGLEBUTTON: + { + return inflater.inflate(R.layout.singlebutton, parent, false); + } + case DOUBLEBUTTON: + { + return inflater.inflate(R.layout.doublebutton, parent, false); + } + case SPACE: + { + return inflater.inflate(R.layout.space, parent, false); + } + case HEADLINE: + { + return inflater.inflate(R.layout.headline, parent, false); + } + } - Button bRun = convertView.findViewById(R.id.singleButton_button); - Button text = convertView.findViewById(R.id.singleButton_text); + return null; + } - bRun.setText(s[2]); - text.setText(s[0]); - //text.setText(listViewItemType.get) + public void bindView(View view, ListItem item) { + String[] strings = item.getStrings(); + switch(item.getType()) { + case SINGLEBUTTON: + { + Button bRun = view.findViewById(R.id.singleButton_button); + Button text = view.findViewById(R.id.singleButton_text); - //viewHolder = new ViewHolderSingleButton(bRun , listViewItem.getText()); - //convertView.setTag(viewHolder); + bRun.setText(strings[2]); + text.setText(strings[0]); + break; + } + case DOUBLEBUTTON: + { + Button bLeft = (Button) view.findViewById(R.id.doubleButton_bLeft); + Button bRight = (Button) view.findViewById(R.id.doubleButton_bRight); + Button text = (Button) view.findViewById(R.id.doubleButton_text); - } else if (listViewItemType == DOUBLEBUTTON) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.doublebutton, null); - Button bLeft = (Button) convertView.findViewById(R.id.doubleButton_bLeft); - Button bRight = (Button) convertView.findViewById(R.id.doubleButton_bRight); - Button text = (Button) convertView.findViewById(R.id.doubleButton_text); + bLeft.setText(strings[3]); + bRight.setText(strings[4]); + text.setText(strings[0]); + break; + } + case SPACE: + { + // NOP + break; + } + case HEADLINE: + { + Button text = (Button) view.findViewById(R.id.headline_text); + text.setText(strings[0]); + break; + } + } + } - bLeft.setText(s[3]); - bRight.setText(s[4]); - text.setText(s[0]); + public static class ListItemViewHolder extends RecyclerView.ViewHolder { + private View itemView; - //viewHolder = new ViewHolderDoubleButton(bLeft,bRight,listViewItem.getText()); + public ListItemViewHolder(@NonNull @NotNull View itemView) { + super(itemView); + this.itemView = itemView; + } - //convertView.setTag(viewHolder); + public void setItemView(View itemView) { + this.itemView = itemView; + } - } else if (listViewItemType == SPACE) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.space, null); - - }else if (listViewItemType == HEADLINE) { - convertView = LayoutInflater.from(getContext()).inflate(R.layout.headline, null); - Button text = (Button) convertView.findViewById(R.id.headline_text); - text.setText(s[0]); - - } else { - viewHolder = (IViewHolder) convertView.getTag(); - } - - return convertView; - } - return convertView; - - }} + public View getItemView() { + return itemView; + } + } +} diff --git a/app/src/main/res/layout/fragment_flur.xml b/app/src/main/res/layout/fragment_flur.xml index f910ec7..ad79a3e 100644 --- a/app/src/main/res/layout/fragment_flur.xml +++ b/app/src/main/res/layout/fragment_flur.xml @@ -1,6 +1,7 @@ -