Autore Topic: Riconoscere dove è stato droppato un oggetto  (Letto 198 volte)

Offline joshhomme

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
Riconoscere dove è stato droppato un oggetto
« il: 03 Marzo 2015, 11:27:23 CET »
0
Salve ragazzi , sto progettando un applicazione che permette ad un docente di organizzare i propri corsi.
L'idea è di permettere al docente di creare delle cartelle dove inserire vari corsi con il metodo del Drag&Drop.
Quindi ho creato due oggetti "Course" e "Folder" (che contiene una lista di Course, inizialmente nulla).

Il mio problema è che nell'azione di Drop su una Cartella non riesco a "farmi tornare" qual'è questa cartella, mi serve per poter aggiungere il corso alla lista di Course)

Posto il codice:
Codice (Java): [Seleziona]
import com.example.android.prova28feb.adapter.CourseListAdapter;
import com.example.android.prova28feb.adapter.FolderListAdapter;
import com.example.android.prova28feb.data.Course;
import com.example.android.prova28feb.data.Folder;
import com.example.android.prova28feb.data.PassCourse;

public class MainActivity extends ActionBarActivity {

    ListView listViewFolder, listViewCourse;
    LinearLayout areaFolder, areaCourse;

    public static List<Course> course;
    public static List<Folder> folder;

    public static CourseListAdapter courseAdapter;
    public static FolderListAdapter folderAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initCourse();
        checkFirstRun();

        listViewFolder = (ListView) findViewById(R.id.listview_folders);
        listViewCourse = (ListView) findViewById(R.id.listview_courses);
        areaFolder = (LinearLayout) findViewById(R.id.linearlayout_folder);
        areaCourse = (LinearLayout) findViewById(R.id.linearlayout_course);
       
        folderAdapter = new FolderListAdapter(this, folder);
        courseAdapter = new CourseListAdapter(this, course);
        listViewFolder.setAdapter(folderAdapter);
        listViewCourse.setAdapter(courseAdapter);

        listViewCourse.setOnItemLongClickListener(myOnItemLongListener);
    }

    AdapterView.OnItemLongClickListener myOnItemLongListener = new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            Course selectedCourse = (Course) parent.getItemAtPosition(position);
            PassCourse passCrs = new PassCourse(view, selectedCourse);

            ClipData data = ClipData.newPlainText("","");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);

            view.startDrag(data, shadowBuilder, passCrs, 0);

            return true;
        }
    };

    public void initCourse(){   /* ANCHE LE CARTELLE -folder */

        folder = new ArrayList<Folder>();
        course = new ArrayList<Course>();

        String [] data1 ={"Cartella 1", "Cartella 2"};

        String [] data2 ={"INTERAZIONE SUL WEB", "INTERAZIONE SUL WEB", "INTERAZIONE UOMO MACCHINA",
                "INTERAZIONE UOMO MACCHINA", "INTERAZIONE UOMO-MACCHINA II",
                "INTERAZIONE UOMO-MACCHINA II", "INTERAZIONE UOMO-MACCHINA II"};

        String [] data3 ={"INFORMATICA[LS (DM 509/99)] (codice: 00823)", "INFORMATICA[LM (DM 270/04)] (codice: 15329)",
                "INFORMATICA[LM (DM 270/04)] (codice: 14495)", "INFORMATICA[LM (DM 270/04)] (codice: 26027)",
                "INFORMATICA[LM (DM 509/99)] (codice: 00547)", "INFORMATICA[LM (DM 509/99)] (codice: 00548)",
                "INFORMATICA[LM (DM 509/99)] (codice: 00823)"};

        int imageFolder = R.drawable.folder_outline_24dp;
        int imageCourse = R.drawable.file2_document_24dp;

        for(int i=0; i<data1.length; i++){
            Folder c = new Folder(data1[i], imageFolder, null);
            folder.add(c);
        }

        for (int i=0; i<data2.length; i++){
            Course f = new Course(data2[i], data3[i], imageCourse);
            course.add(f);
        }
    }
}

Codice (Java): [Seleziona]
import com.example.android.prova28feb.R;
import com.example.android.prova28feb.data.Folder;
import com.example.android.prova28feb.rowFolderDragListener.RowFolderDragListener;

public class FolderListAdapter extends BaseAdapter {

    Context context;
    List<Folder> folders;

    public FolderListAdapter( Context c, List<Folder> f){
        this.context = c;
        this.folders = f;
    }

    @Override
    public int getCount(){
        return folders.size();
    }

    @Override
    public Object getItem(int position){
        return folders.get(position);
    }

    @Override
    public long getItemId(int position){
        return folders.indexOf(getItem(position));
    }

    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater)
                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.row_folder, null);
            holder = new ViewHolder();
            holder.txtTitle = (TextView) convertView.findViewById(R.id.textview_foldername);
            holder.imageView = (ImageView) convertView.findViewById(R.id.imageview_folder);

            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }

        Folder rowItem = (Folder) getItem(position);

        holder.txtTitle.setText(rowItem.getFolderName());
        holder.imageView.setImageResource(rowItem.getFolderImage());

        convertView.setOnDragListener(new RowFolderDragListener());

        return convertView;
    }
}

Codice (Java): [Seleziona]
import com.example.android.prova28feb.MainActivity;
import com.example.android.prova28feb.adapter.FolderListAdapter;
import com.example.android.prova28feb.data.Course;
import com.example.android.prova28feb.data.Folder;
import com.example.android.prova28feb.data.PassCourse;

import java.util.List;

public class RowFolderDragListener implements View.OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {

          String area="vuoto";
//        v.getTag()
//        String cartella = v.getTag(MainActivity.folder.).toString();

        switch (event.getAction()){
            case DragEvent.ACTION_DRAG_ENTERED:
                v.setBackgroundColor(Color.LTGRAY); /*OR GRAY*/
                break;

            case DragEvent.ACTION_DRAG_EXITED:
                v.setBackgroundColor(Color.TRANSPARENT);
                break;

            case DragEvent.ACTION_DRAG_ENDED:
                v.setBackgroundColor(Color.TRANSPARENT);
                break;

            case DragEvent.ACTION_DROP:
                /* probabile metodo onProcessDrop */

                PassCourse passCourse = (PassCourse) event.getLocalState();

                View view = passCourse.getView();
                Course passedCourse = passCourse.getCourse();

                String corso = passCourse.getCourse().getCourseName().concat(passCourse.getCourse().getCourseDetail());

                if(removeCourseToList(MainActivity.course, passedCourse)){
                    /* AGGIUNGI IL "course" alla "folder" se la trovi */
                }

                MainActivity.courseAdapter.notifyDataSetChanged();
//
//                    /* Funziona -- bisogna vedere se è il modo migliore per cancellare il textview=Corsi*/
//                    if (folder.size()>=1){
//                        setContentView(R.layout.change);
//                    }
                break;
        }
        return true;
    }

    public boolean removeCourseToList(List<Course> lc, Course c){
        boolean result = lc.remove(c);
        return result;
    }
}