Как создать два синхронных ListView с Dynami c Содержание - PullRequest
1 голос
/ 19 февраля 2020

Я хочу создать ScrollView, который имеет динамический c контент с двумя столбцами в себе.

А элементы правого столбца связаны с элементами левого столбца, расположенными поперечно. (Как и у-координаты элемента первого столбца: [(0,100), (100,200), (200,300)] - у-координаты элемента второго столбца: [(50,150), (150,250)])

Использование одного ScrollView или ListView невозможно, потому что они не могут иметь два столбца, подобных этому кресту, как я знаю. Итак, у меня есть два решения. Эти подходы к решению имеют разные проблемы.

Вот мое первое решение:
-A Dynami c пользовательское представление внутри ScrollView.
-Проблемой этого подхода является то, что я не могу понять, как обновить ScrollView и Dynami c Custom View, поэтому он не прокручивается.

Мое второе решение:
-Два отдельных подключенных списка просмотра (если вы перемещаете один, другой вид автоматически скользит в одно и то же положение синхронно).
-Эта проблема с решением - я не могу найти способ соединить их друг с другом.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 20 февраля 2020

Для любого человека, которому может понадобиться ответ, я нашел решение в здесь . Я улучшил это с , что (что неверно) (на самом деле я это исправил). И вот мое окончательное решение:

MyScrollView. java

public class MyScrollView extends ScrollView implements IScrollListener {

    private static final String TAG = "MyScrollView";
    private IScrollListener listener;

    public MyScrollView(Context context) {
        super(context);
    }

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setScrollViewListener(IScrollListener listener) {
        this.listener = listener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldX, int oldY) {
        super.onScrollChanged(x, y, oldX, oldY);
        if (listener != null) {
            listener.onScrollChanged(this, x, y, oldX, oldY);
        } else {
            Log.i(TAG, "asdasd");
        }
    }

    @Override
    public void onScrollChanged(IScrollListener scrollView, int x, int y, int oldX, int oldY) {
        super.onScrollChanged(x, y, oldX, oldY);
        if (listener != null) {
            listener.onScrollChanged(this, x, y, oldX, oldY);
        } else {
            Log.i(TAG, "asdasd");
        }
    }
}

MyActivity. java

public class MyActivity extends AppCompatActivity implements IScrollListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_multi_position);

        .
        .
        .

        scrollViewLeft = (MyScrollView) this.findViewById(R.id.scrollViewLeft);
        scrollViewRight = (MyScrollView) this.findViewById(R.id.scrollViewRight);

        .
        .

        scrollViewLeft.setScrollViewListener(this);
        scrollViewRight.setScrollViewListener(this);

        .
        .
        LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View viewLeft = vi.inflate(R.layout.target_item, null);
        View viewRight = vi.inflate(R.layout.target_item_right, null);

        // insert into left view
        ViewGroup insertPointLeft = (ViewGroup) findViewById(R.id.leftLinearLayout);
        insertPointLeft.addView(viewLeft, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        // insert into right view
        ViewGroup insertPointRight = (ViewGroup) findViewById(R.id.rightLinearLayout);
        insertPointRight.addView(viewRight, targets.size(), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        // fill in any details dynamically here
        TextView number = (TextView) viewLeft.findViewById(R.id.number);
        number.setText("1");
        TextView name = (TextView) viewLeft.findViewById(R.id.name);
        name.setText("Muhammed Aydogan");

        // fill in any details dynamically here
        TextView number2 = (TextView) viewRight.findViewById(R.id.number);
        number2.setText("2");
        TextView name2 = (TextView) viewRight.findViewById(R.id.name);
        name2.setText("Muhammed Aydogan");*/
    }

    @Override
    public void onScrollChanged(IScrollListener scrollView, int x, int y, int oldX, int oldY) {
        if (scrollViewLeft.equals(scrollView)) {
            scrollViewRight.scrollTo(x, y);
        } else if (scrollViewRight.equals(scrollView)) {
            scrollViewLeft.scrollTo(x, y);
        }
    }
}

IScrollListener. java

public interface IScrollListener {
    void onScrollChanged(IScrollListener scrollView, int x, int y, int oldX, int oldY);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...