ListView с двумя полями

82
06 июня 2021, 13:20

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

После попробовал через GridLayout но там ситуация была та же.

После мой взор пал на ListView, но я столкнулся с проблемой что я не понимаю как вывести сразу 2 элемента в 1 строку, а коды из других источников у меня не работают.

Внимание вопрос: Как можно вывести 2 ячейчи текстового поля в 1 строку ListView или любой другой инструмент без отступа от чисел 10,100 и т.д.?

UDP Ошибка:

2019-08-18 05:34:33.640 26339-26339/com.github.myapplicatiokek E/AndroidRuntime: FATAL EXCEPTION: main Process: com.github.myapplicatiokek, PID: 26339 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.github.myapplicatiokek/com.github.myapplicatiokek.Activitys}: java.lang.ClassNotFoundException: Didn't find class "com.github.myapplicatiokek.Activitys" on path: DexPathList[[zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/base.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_resources_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/lib/x86, /system/lib, /system/product/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3184) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7319) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934) 2019-08-18 05:34:33.665 26339-26339/com.github.myapplicatiokek E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.github.myapplicatiokek.Activitys" on path: DexPathList[[zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/base.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_resources_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/lib/x86, /system/lib, /system/product/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43) at android.app.Instrumentation.newActivity(Instrumentation.java:1243) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3172) ... 11 more Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.github.myapplicatiokek-0vZzwZCoBl_jWpnGF0gIMA==/split_lib_resources_apk.apk at dalvik.system.DexFile.openDexFileNative(Native Method) at dalvik.system.DexFile.openDexFile(DexFile.java:365) at dalvik.system.DexFile.(DexFile.java:107) at dalvik.system.DexFile.(DexFile.java:80) at dalvik.system.DexPathList.loadDexFile(DexPathList.java:444) at dalvik.system.DexPathList.makeDexElements(DexPathList.java:403) at dalvik.system.DexPathList.(DexPathList.java:164) at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:126) at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:101) at dalvik.system.PathClassLoader.(PathClassLoader.java:74) at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:87) at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:116) at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:114) at android.app.ApplicationLoaders.getClassLoaderWithSharedLibraries(ApplicationLoaders.java:60) at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:851) at android.app.LoadedApk.getClassLoader(LoadedApk.java:950) at android.app.LoadedApk.getResources(LoadedApk.java:1188) at android.app.ContextImpl.createAppContext(ContextImpl.java:2462) at android.app.ContextImpl.createAppContext(ContextImpl.java:2454) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6306) at android.app.ActivityThread.access$1300(ActivityThread.java:220) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1852) ... 6 more

Answer 1

Я вижу 3 варианта.

  1. Использовать конкатенацию строк;
  2. Сверстать свой макет и написать свой адаптер для ListView (как это сделать можно узнать в статье);
  3. Если Вы всё-таки выводите данные табличного формата, поискать готовые виджеты таблиц под Android на том же GitHub.

Первый вариант - костыль. Но, для простейших случаев, может и сойдёт. Второй и третий варианты сложнее, но зато результат более качественный.

Answer 2

Для начала, я считаю, необходимо создать макет самого элемента списка:

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
         <TextView
             android:id="@+id/text1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="15sp"
             android:textColor="#000000" />
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="15sp"
             android:textColor="#000000"
             android:text=") " />
         <TextView
             android:id="@+id/text2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="15sp"
             android:textColor="#000000" />
  </LinearLayout >

После переходим к активности:

Activitys.java

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.view.LayoutInflater;
import android.widget.TextView;
import android.view.View;
import android.view.LayoutInflater;
import android.widget.BaseAdapter;
import android.view.ViewGroup;
import android.content.Context;
public class Activitys extends Activity{
    ListView list;
    ListViewAdapter adapter;
    String[] datas1 = new String[]{}; //то, что перед скобкой
    String[] datas2 = new String[]{}; //то, что после скобки
    private class ListViewAdapter extends BaseAdapter{
          private LayoutInflater mLayoutInflater;
          ListViewAdapter(Context context){
              mLayoutInflater = LayoutInflater.from(context);
          };
          @Override
          public int getCount(){
              return datas2.length;
          };
          @Override
          public Object getItem(int position){
              return position;
          };
          @Override
          public long getItemId(int position){
              return position;
          };
          @Override
          public View getView(int position, View convertView, ViewGroup parent){
              if (convertView == null) convertView = mLayoutInflater.inflate(R.layout.item_list, null);
             TextView text1 = (TextView) convertView.findViewById(R.id.text1);
             text1.setText(datas1[position]);
             TextView text2 = (TextView) convertView.findViewById(R.id.text2);
             text2.setText(datas2[position]);
             return convertView;
         };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        list = (ListView) findViewById(R.id.list);
        adapter = new ListViewAdapter(Activitys.this);
        list.setAdapter(adapter);
    };
}

И, собственно, макет всего списка:

list.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"
    android:orientation="vertical" >
         <ListView
             android:id="@+id/list"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />
</LinearLayout >

P.S. пишите в комментарии об ошибках

UPDATE

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.YOUR_PACKAGE.YOUR_NAME">
//Исправьте YOUR_PACKAGE и YOUR_NAME на ваши
    <uses-sdk
        android:minSdkVersion="12"
        android:targetSdkVersion="27" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Activitys" />
//Здесь же указываются и другие используемые активности
    </application>
</manifest>
READ ALSO
Как получить доступ к переменной внутреннего класса из другого пакета?

Как получить доступ к переменной внутреннего класса из другого пакета?

Как в классе C получить доступ к переменной str внутреннего класса PubInnerClass, которая лежит в классе А, если она protected?

82
Как вернуть код в начало и запустить?

Как вернуть код в начало и запустить?

Есть код через который можно выполнить вход прописав необходимый логин и пароль, если ты ввел логин неправильно то программа пишет "Error"

370
React input обновление последней буквы Есть ли изящное решение

React input обновление последней буквы Есть ли изящное решение

Есть React контрол с тегом input и дочерний контрол обрабатывающий введенное значение

99