Nano Hash - криптовалюты, майнинг, программирование

Android Drag and Drop в фрагменте на карточках стека

У меня проблема с перетаскиванием.

Вот мой сценарий: у меня есть один фрагмент, который содержит набор карт, а одна из моих карт содержит перетаскивание элементов, то есть текстовое представление с учетом приоритета.

Учебное пособие по перетаскиванию

Это видео на YouTube о том же

Пример работает нормально, когда я ввожу другое действие. Но это вызывает проблему, когда я делаю карту фрагмента.

Журнал ошибок

02-07 12:09:49.271 17876-17876/com.panenviron E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.panenviron, PID: 17876
                                                                          java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getChildCount()' on a null object reference
                                                                              at com.panenviron.fragments.TaskCardListShow.onCreateView(TaskCardListShow.java:61)

Фрагмент TaskCardListShow.java, который содержит сложенные карты. Это работает нормально, когда я пытаюсь реализовать здесь концепцию перетаскивания, что вызывает сбой приложения

ниже приведен код

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Toast;

import com.jmedeisis.draglinearlayout.DragLinearLayout;
import com.panenviron.R;

import java.util.ArrayList;
import java.util.List;

import link.fls.swipestack.SwipeStack;

public class TaskCardListShow extends Fragment implements SwipeStack.SwipeStackListener, View.OnClickListener {
    private ArrayList<String> mData;
    private ArrayList<String> LayOutData;
    private SwipeStack mSwipeStack;
    private SwipeStackAdapter mAdapter;
    public int cardCounter;
    public TaskCardListShow() {
    }
    public static TaskCardListShow newInstance() {

        TaskCardListShow _TaskCardListShow = new TaskCardListShow();

        return _TaskCardListShow;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.task_card_list_show, container, false);
        Log.e("im on","TaskCardListShow");
        mSwipeStack = (SwipeStack) view.findViewById(R.id.swipeStack);
        mData = new ArrayList<>();
        LayOutData = new ArrayList<>();
        mAdapter = new SwipeStackAdapter(mData,LayOutData);
        mSwipeStack.setAdapter(mAdapter);
        mSwipeStack.setListener(this);

        cardCounter=4;// write function for getting card count.
        fillStackCard();

        DragLinearLayout dragDropAndroidLinearLayout = (DragLinearLayout) view.findViewById(R.id.drag_drop_layout);
        for (int i = 0; i < dragDropAndroidLinearLayout.getChildCount(); i++) {
            View child = dragDropAndroidLinearLayout.getChildAt(i);
            dragDropAndroidLinearLayout.setViewDraggable(child, child);
        }
        return view;
    }

    private void fillStackCard() {
        for (int x = 0; x <cardCounter; x++) {
            mData.add(getString(R.string.dummy_text) + " " + (x + 1));
            LayOutData.add(getString(R.string.str_card)+ (x + 1));
        }
    }


    @Override
    public void onClick(View v) {

    }
    @Override
    public void onViewSwipedToRight(int position) {
        String swipedElement = mAdapter.getItem(position);
    }

    @Override
    public void onViewSwipedToLeft(int position) {
        String swipedElement = mAdapter.getItem(position);
    }

    @Override
    public void onStackEmpty() {

        removeTaskCardFragment();
    }
    public void removeTaskCardFragment(){
        FragmentManager manager = getActivity().getSupportFragmentManager();
        FragmentTransaction mFragmentTransaction = manager.beginTransaction();
        TaskCardListShow _TaskCardListShowFragment = new TaskCardListShow();
        mFragmentTransaction.remove(_TaskCardListShowFragment);
        mFragmentTransaction.commit();
        manager.popBackStack();
    }

    public class SwipeStackAdapter extends BaseAdapter {

        private List<String> mData;
        private List<String> LayOutData;

        public SwipeStackAdapter(List<String> data,List<String> Ldata) {
            this.mData = data;
            this.LayOutData = Ldata;
        }

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

        @Override
        public String getItem(int position) {
            return mData.get(position);
        }

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

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            String LName=LayOutData.get(position);

            int id = getActivity().getApplicationContext().getResources().
                    getIdentifier(LName, "layout", getActivity().getPackageName());
            convertView = getActivity().getLayoutInflater().inflate(id, parent, false);

            Log.e("position=", String.valueOf(position));


            return convertView;
        }
    }

}

Card_3.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    card_view:cardCornerRadius="@dimen/card_corner_radius"
    card_view:cardElevation="@dimen/elevation_large"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <com.jmedeisis.draglinearlayout.DragLinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/drag_drop_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/drag_drop_textview1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:background="#fff"
                android:elevation="3dp"
                android:gravity="center"
                android:padding="30dp"
                android:text="P - 3"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/drag_drop_textview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:background="#fff"
                android:elevation="3dp"
                android:gravity="center"
                android:padding="30dp"
                android:text="P - 2"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/drag_drop_textview2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:background="#fff"
                android:elevation="3dp"
                android:gravity="center"
                android:padding="30dp"
                android:text="P - 4"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/drag_drop_textview3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:background="#fff"
                android:elevation="3dp"
                android:gravity="center"
                android:padding="30dp"
                android:text="P - 5"
                android:textStyle="bold" />

        </com.jmedeisis.draglinearlayout.DragLinearLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>

уровень

compile 'com.jmedeisis:draglinearlayout:1.1.0'

Ответы:


1

Моя ошибка в том, что я пытаюсь получить доступ к макету неправильным способом. то есть перед тем, как перейти к моему макету перетаскивания, я пытаюсь получить доступ к полям там, поэтому я просто изменил

if(position==2){    // drag and layou card will come at this condition.
                    DragLinearLayout dragDropAndroidLinearLayout =
                            (DragLinearLayout) findViewById(R.id.drag_drop_layout);
                    for (int i = 0; i < 3; i++) {
                        View child = dragDropAndroidLinearLayout.getChildAt(i);
                        dragDropAndroidLinearLayout.setViewDraggable(child, child);
                    }
                }

Теперь я могу видеть список перетаскивания.

07.02.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..