【问题标题】:Android: Dynamically adding new row to grid viewAndroid:动态添加新行到网格视图
【发布时间】:2022-08-17 03:31:45
【问题描述】:

我试图用我在单独的 xml 中创建的单元格填充这个 GridView

网格视图:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=\"#FF2C3C63\"
    tools:layout_editor_absoluteX=\"11dp\"
    tools:layout_editor_absoluteY=\"195dp\">

    <Button
        android:id=\"@+id/button\"
        android:layout_width=\"wrap_content\"
        android:layout_height=\"wrap_content\"
        android:onClick=\"kamuScan\"
        android:text=\"temp\"
        app:layout_constraintBottom_toBottomOf=\"parent\"
        app:layout_constraintStart_toStartOf=\"parent\" />

    <Button
        android:id=\"@+id/ScanningDone\"
        android:layout_width=\"wrap_content\"
        android:layout_height=\"wrap_content\"
        android:text=\"Complete\"
        app:layout_constraintBottom_toBottomOf=\"parent\"
        app:layout_constraintEnd_toEndOf=\"parent\" />

    <LinearLayout
        android:layout_width=\"match_parent\"
        android:layout_height=\"match_parent\"
        app:layout_constraintBottom_toBottomOf=\"parent\"
        app:layout_constraintEnd_toEndOf=\"parent\"
        app:layout_constraintStart_toStartOf=\"parent\"
        app:layout_constraintTop_toTopOf=\"parent\"
        app:layout_constraintVertical_bias=\"0.941\">

        <GridView
            android:id=\"@+id/inputGridView\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"269dp\"
            android:layout_gravity=\"center\"
            android:columnWidth=\"200dp\"
            android:gravity=\"center\"
            android:nestedScrollingEnabled=\"true\"
            android:numColumns=\"1\">

        </GridView>
    </LinearLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

单细胞:

<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
    xmlns:tools=\"http://schemas.android.com/tools\"
    android:layout_width=\"wrap_content\"
    android:layout_height=\"wrap_content\"
    android:padding=\"5dp\" >

    <TextView
        android:id=\"@+id/barcodeTextView\"
        android:layout_width=\"146dp\"
        android:layout_height=\"wrap_content\"
        android:singleLine=\"true\"
        android:text=\"Barcode\"
        android:textSize=\"20sp\" />


    <Button
        android:id=\"@+id/IncrementDown\"
        android:layout_width=\"50dp\"
        android:layout_height=\"58dp\"
        android:text=\"-\">
    </Button>

    <EditText
        android:id=\"@+id/Quantity\"
        android:layout_width=\"51dp\"
        android:layout_height=\"match_parent\"
        android:inputType=\"numberSigned\"
        android:maxLines=\"1\"
        android:text=\"0\"
        android:textAlignment=\"center\"/>

    <Button
        android:id=\"@+id/IncrementUp\"
        android:layout_width=\"50dp\"
        android:layout_height=\"58dp\"
        android:text=\"+\">
    </Button>



</LinearLayout>

适配器的类:

public class InputUIGenerator extends BaseAdapter{
    private Context mContext;

    public InputUIGenerator(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 1;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View inputGridView;
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inputGridView = new View(mContext);
        inputGridView = inflater.inflate(R.layout.input_grid_single, null);

        TextView textView = (TextView)       inputGridView.findViewById(R.id.barcodeTextView);
        Button incrementUp = (Button) inputGridView.findViewById(R.id.IncrementUp);
        Button incrementDown = (Button) inputGridView.findViewById(R.id.IncrementDown);
        EditText quantity = (EditText) inputGridView.findViewById(R.id.Quantity);
        return inputGridView;
    }
}

以及应该显示所有内容的类:

public class InputPage extends Activity {
    GridView inputGridView;

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

        InputUIGenerator generatorAdapter = new InputUIGenerator(this);
        inputGridView=(GridView) findViewById(R.id.inputGridView);
        inputGridView.setAdapter(generatorAdapter);
        inputGridView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
                
            }
        });

这将创建一个带有 TextView、Button、TextEdit、Button 的单行,这很好。 创建新行的事件应该来自条形码扫描仪,为了替换它,我现在添加了一个按钮。 所以想要的结果是按下按钮,得到一个新行,并保留第一行的值。 这可能是错误的方法,我现在真的不确定,我应该怎么做。

另外,在最后,我想从单个单元格内的所有这些项目中收集数据,并且我真的不知道如何在生成它们时为它们动态分配 ID。 提前致谢。

    标签: android android-layout


    【解决方案1】:

    我在 github 上找到了this 代码,并且我设法以我想要的方式实现它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多