当前位置: 首页 > 知识库问答 >
问题:

为ListView Android传递两个变量

曾云
2023-03-14

我正在开发一个项目QR扫描仪应用程序使用Zxing扫描仪库,我想输入扫描数据到一个ListView。所以我想在扫描项目后将ItemName和ItemPrice输入到ListView中。为了区分itemName和itemPrice与扫描器结果(纯文本),我使用了string tokenizer类,然后可以分别获得itemName和Price。

解决方案应该是,当用户扫描一个项目时,它应该在列表视图中分别显示项目名称和项目价格。问题是如何使用字符串和整数来实现这个系统。

StringTokenizer tokenizer = new StringTokenizer(scanRes, ":");
   itmName = tokenizer.nextToken();
   itmPrice = Integer.valueOf(tokenizer.nextToken());

我通过这个语句将结果传递给一个名为“Scanres”的字符串(上面提到的代码)。

qrResult.setText(intent.getStringExtra("SCAN_RESULT"));
String scanRes = intent.getStringExtra("SCAN_RESULT");

我想在ListView中查看上面提到的两个变量(itmName和itmPrice)中的赋值。我已经实现了一个解决方案bt它需要字符串数组来传递值。Bt我需要传递保存在这两个变量中的值。我将在下面发布我创建的解决方案。如果有人能说出我在代码中需要更改的东西,我将非常感谢。

这是扫描仪活动类的代码。它为底部的“OnItemClick”方法提供了一个错误。

public class QRScanMenu extends Activity {
String itmName;
Integer itmPrice;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.qrscannermenu);

    HandleClick handleClick = new HandleClick();
    findViewById(R.id.QRButton).setOnClickListener(handleClick);
    findViewById(R.id.ExitButton).setOnClickListener(handleClick);



}

private class HandleClick implements View.OnClickListener{
    public void onClick(View arg0){
        try{
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            switch (arg0.getId()){
                case R.id.QRButton:
                    intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                    break;

                case R.id.ExitButton:
                    Intent i = new Intent(QRScanMenu.this, MainActivity.class);
                    startActivity(i);
                    break;
            }
            startActivityForResult(intent, 0);
        }
        catch (ActivityNotFoundException ex){
            showDialog(QRScanMenu.this, "No Scanner Application Found", "Download Scanner Application?", "Yes", "No").show();
        }
    }
}

private static AlertDialog showDialog(final Activity activity, CharSequence title, CharSequence message, CharSequence btnYes, CharSequence btnNo){
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
    downloadDialog.setTitle(title);
    downloadDialog.setTitle(message);
    downloadDialog.setPositiveButton(btnYes, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try {
                activity.startActivity(intent);
            } catch (ActivityNotFoundException ex) {

            }
        }
    });
    downloadDialog.setNegativeButton(btnNo, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    return downloadDialog.show();
}

public void onActivityResult(int reqCode, int resCode, Intent intent){
    if (reqCode == 0){
        TextView qrStatus = (TextView) findViewById(R.id.statusText);
        TextView qrResult = (TextView) findViewById(R.id.resultText);
        ListView listView = (ListView) findViewById(R.id.qrItmList);

        if(resCode == RESULT_OK){
            qrStatus.setText(intent.getStringExtra("SCAN_RESULT_FORMAT"));
            qrResult.setText(intent.getStringExtra("SCAN_RESULT"));
            String scanRes = intent.getStringExtra("SCAN_RESULT");
            StringTokenizer tokenizer = new StringTokenizer(scanRes, ":");
            itmName = tokenizer.nextToken();
            final String[] newd = new String[1];
            newd[1]=itmName;
            itmPrice = Integer.valueOf(tokenizer.nextToken());
            Integer[] newI = new Integer[1];
            newI[1]=itmPrice;

            customList adapter = new customList(QRScanMenu.this, newd, newI);
            listView.setAdapter(adapter);
            listView.setOnClickListener(new AdapterView.OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                    Toast.makeText(QRScanMenu.this, "You Clicked at "+newd, Toast.LENGTH_SHORT).show();
                }
            });



            //adapter.add(itmName);
            //adapter.add(itmPrice);
        }
        else if (resCode == RESULT_CANCELED){
            qrStatus.setText("Press QR Scan button to Scan Item");
            qrResult.setText("Scan Cancelled");
        }
    }
}
}
final String[] newd = new String[1];
newd[1]=itmName;
itmPrice = Integer.valueOf(tokenizer.nextToken());
Integer[] newI = new Integer[1];
newI[1]=itmPrice;
public class customList extends ArrayAdapter<String> {
private final Activity context;
private final String[]itmName;
private final Integer[]itmPrice;
public customList(Activity context, String[]itmName, Integer[]itmPrice){
    super(context, R.layout.columnview, itmName);
    this.context = context;
    this.itmName = itmName;
    this.itmPrice = itmPrice;
}

@Override
public View getView(int position, View view, ViewGroup parent){
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.columnview, null, true);
    TextView txtViewName = (TextView) rowView.findViewById(R.id.itmCol);
    TextView txtViewPrice = (TextView) rowView.findViewById(R.id.priceCol);
    txtViewName.setText(itmName[position]);
    txtViewPrice.setText(itmPrice[position]);
    return rowView;
}
}

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

<TableRow>
<TextView
    android:id="@+id/itmCol"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:textStyle="bold" />

<TextView
    android:id="@+id/priceCol"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:textStyle="bold"/>
</TableRow>

这是QR扫描仪活动课的代码

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

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/linLayout1">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/QRButton"
        android:text="QR Scan"
        android:textSize="18sp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ExitButton"
        android:text="Back Main"
        android:textSize="18sp"/>
</LinearLayout>


<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/statusText"
    android:layout_below="@+id/linLayout1"
    android:text="Press QR Scan Button to Scan Items"
    android:textSize="18sp"/>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/resultText"
    android:text="Ready to Scan"
    android:textSize="18sp"
    android:layout_below="@+id/statusText"
    android:background="@android:color/white"
    android:textColor="@android:color/black"/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/qrItmList"
    android:layout_below="@+id/resultText"
    android:layout_centerHorizontal="true">
</ListView>

共有1个答案

公冶泰
2023-03-14

首先,您需要创建一个新的对象来保存您的两个项目

public class Product {
    String name;
    int price;
 }

然后为项目创建ArrayAdapter。

public class MyAdpater extends ArrayAdapter<Product> {

    private final Activity context;
    public customList(Activity context, Product[] products){
        super(context, R.layout.columnview, products);
        this.context = context;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent){
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.columnview, null, true);
        TextView txtViewName = (TextView) rowView.findViewById(R.id.itmCol);
        TextView txtViewPrice = (TextView) rowView.findViewById(R.id.priceCol);
        txtViewName.setText(getItemAtPosition(position).name);
        txtViewPrice.setText(String.valueOf(getItemAtPosition(position).price]));
        return rowView;
    }
}

您的onClickListener将是:

listView.setOnClickListener(new AdapterView.OnItemClickListener(){
    public void onItemClick(AdapterView<Product> parent, View view, int position, long id){
            Toast.makeText(QRScanMenu.this, "You Clicked at "+ parent.getItemAtPosition(position).name, Toast.LENGTH_SHORT).show();
    }
});
 类似资料:
  • 我得到了。ORA-1722向过程传递一个单个变量而不是一个数字(如54,55,56)时出错。 在过程光标块中,我写了: 运行该过程时,错误出现在上面的 select 语句中。 有没有办法在单个参数中处理这种情况

  • 问题内容: 我正在使用shell_exec方法从PHP调用test.sh。 但是,命令行脚本说它仅收到1个参数:/tmp/my_script.php 当我将呼叫更改为: 码: 它说它收到了3个参数,但是argv [1]和argv [2]为空。 当我将呼叫更改为: 码: 脚本最终将按预期接收所有3个参数。 您是否始终需要使用脚本发送仅带引号的文本,并且不允许发送$ var这样的变量?还是有一些特殊的

  • 问题内容: 我有这个站点,它的页面之一从数据库中创建了一个简单的人员列表。我需要将一个特定的人添加到我可以访问的变量中。 如何修改该行以将$ ms变量也传递给视图? 问题答案: 只需将其作为数组传递: 或将它们链接起来,就像@Antonio提到的那样。

  • 我是一个非程序员,有非常少的代码接触,但我想修改一个现有的代码库。我大大简化了下面的代码。请让我知道,如果我可以提供任何进一步的信息或如果这是没有意义的所有!Vocab很难。:) ClassD:

  • 我用mtcars数据集来说明我的问题。 例如,我想将数据子集到4-cyl汽车。我可以做到: 在我的工作中,我需要传递一个字符串变量作为我的列名。例如: 我也做了: 在这两种情况下,我都得到空数据帧。

  • 问题内容: 我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我该怎么做? 问题答案: 很难理解您正在问的问题,但这是一个可能的答案: 使B类成为A的子类: 如果重新声明为,则会出现一种情况,其中存在一个可以称为或的属性。(或在任一或刚刚…甚至作为或地方,并有类型和分别。) 如果您无法在和(或,以及一些包含声明的第三类)之间创建直接或子类型关系,那么您很不走运。他们无法共享声明。