Показывать один элемент за раз в ListView - PullRequest
0 голосов
/ 25 июня 2018

Я работаю над приложением WearOS.Я использую ListView, чтобы показать список строк.Прямо сейчас ListView выглядит так:

enter image description here

Я хочу, чтобы одна строка занимала весь экран.Как только пользователь проводит пальцем вверх, строка 2 занимает весь экран.Проведите пальцем вверх, и строка 3 займет весь экран и т. Д. Итак, вот так: enter image description here

Я наткнулся на эту ссылку , которая является именно тем, что яхочу сделать, но первый метод не работает, а второй метод предлагает библиотеку, но я не хочу использовать библиотеку для того, что кажется довольно простой задачей.Я не хочу использовать RecyclerView.Спасибо за помощь.

Вот мой XML-файл для основной деятельности, где находится ListView.

<?xml version="1.0" encoding="utf-8"?>
<android.support.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dark_grey"
    android:padding="@dimen/box_inset_layout_padding"
    tools:context=".MainActivity"
    tools:deviceIds="wear">

    <!-- Change FrameLayout to a RelativeLayour -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/inner_frame_layout_padding"
        app:boxedEdges="all">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true" />
    </RelativeLayout>
</android.support.wear.widget.BoxInsetLayout>

1 Ответ

0 голосов
/ 25 июня 2018

Попробуйте следующее (идея состоит в том, чтобы программно установить высоту textView равной высоте экрана):

1) MnnnnnnnActivity.class: ----------

public class MnnnnnnnActivity extends AppCompatActivity {

private ListView lv;
private CustomAdapter customAdapter;
private String[] s = new String[10];

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.layout6);

    for (int i = 0; i < 10; i++) {
        s[i] = "ROW " + String.valueOf(i + 1);
    }

    lv = (ListView) findViewById(R.id.lv);
    customAdapter = new CustomAdapter(MnnnnnnnActivity.this, s);
    lv.setAdapter(customAdapter);

}

public int getScreenHeight() {

    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.heightPixels;

}
}

2) CustomAdapter.class: --------

public class CustomAdapter extends ArrayAdapter<String> {

private String[] s;
private WeakReference<MnnnnnnnActivity> mActivity;

public CustomAdapter(MnnnnnnnActivity activity1, String[] s) {
    super(activity1.getApplicationContext(), R.layout.list_view_item, s);
    this.s = s;
    mActivity = new WeakReference<MnnnnnnnActivity>(activity1);

}

@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if(mActivity != null) {
        MnnnnnnnActivity activity = mActivity.get();
        if (activity != null) {
            if (convertView == null) {
                LayoutInflater inflater = LayoutInflater.from(activity);
                convertView = inflater.inflate(R.layout.list_view_item, null);
                holder = new ViewHolder();

                holder.tv = (TextView) convertView.findViewById(R.id.tv);

                convertView.setTag(holder);

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

            holder.tv.setText(s[position]);
            holder.tv.setHeight(activity.getScreenHeight());


        }
    }

    return convertView;

}

private class ViewHolder {
    TextView tv;
}

}

3) layout6.xml: -----------

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv">
</ListView>

</android.support.constraint.ConstraintLayout>

4) list_view_item.xml: ----------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tv"
android:singleLine="true"
    android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="-"
    android:gravity="center"
android:textSize="20sp"
android:textStyle="bold">
</TextView>

</LinearLayout>

5) Примечание. Хотя это проверено на телефоне, эту же идею можно использовать длядобиться чего-то похожего на готовом.Кроме того, лучшим подходом было бы установить высоту linearLayout (которая содержит textView) равной высоте экрана.

6) Вывод:

Output

...