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

Android-ListView-将ListView中的值输出到屏幕

曹超
2023-03-14

我有一个SQLite数据库,其中包含以下信息

--------------------------------
Account_Name    Account_Balance
-------------------------------- 
Savings         1000.00

Checking        1000.00

我将项目输出到列表视图。我的问题是如何让我的OnItemClick正确地告诉我选择的值?当我单击保存时,我希望“保存”通过吐司显示。当我尝试输出时,我只能输出项目位置。我不想要列表视图中的位置,我对字符串值更感兴趣。


    public void onItemClick(AdapterView parent, View view, int position, long id)
    {
        /*What do I need to code here to just have the value outputted*/        

        //Toast toast = Toast.makeText(getApplicationContext(), temp1, Toast.LENGTH_LONG);
        //toast.show();
    }

代码:主菜单活动。JAVA

public class main_menu_activity extends Activity implements AdapterView.OnItemClickListener
{
DatabaseHandler db;
ArrayList<Account> account_details;
ListView accountList;
int num;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_menu_activity);
    accountList = (ListView)findViewById(R.id.accountListView);
    db = new DatabaseHandler(getApplicationContext());

    displayListView();

    // Empty Account table
    //db.deleteFromAccountTable();

    accountList.setOnItemClickListener(this);

    num = 1;
}

// MENU //
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu_activity, menu);

    return super.onCreateOptionsMenu(menu);
}

// MENU //
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    // take appropriate action for each action item clicked
    switch(item.getItemId())
    {
        case R.id.action_add_new:
        {
            // perform add new item action
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setMessage("Enter account details:");

            LinearLayout layout = new LinearLayout(this);
            layout.setOrientation(LinearLayout.VERTICAL);

            // Set an EditText view
            final EditText input = new EditText(this);
            input.setHint("Account Name");
            layout.addView(input);

            final EditText input2 = new EditText(this);
            input2.setHint("Account Balance");
            layout.addView(input2);

            alert.setView(layout);

            alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i)
                {
                    if (input.getText().toString() != null)
                    {
                        // Create empty Account
                        Account temp_account;
                        temp_account = new Account();

                        // Save information to SQLiteDatabase
                        temp_account.setAccountName(input.getText().toString());
                        temp_account.setAccountBalance(Double.parseDouble(input2.getText().toString()));

                        // Add temp account
                        db.addAccount(temp_account);
                        displayListView();
                    }
                    else
                    {
                        dialogInterface.cancel();
                    }
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialogInterface, int i)
                {
                    // Output to logcat
                    /*ArrayList<Account> allAccounts = db.getAllAccounts();
                    for (Account account: allAccounts)
                    {
                        Log.d("Output", Integer.toString(account.getAccountID()));
                        Log.d("Output", account.getAccountName());
                        Log.d("Output", Double.toString(account.getAccountBalance()));
                    }*/
                    // cancel
                    dialogInterface.cancel();
                }
            });

            alert.show();
            return true;
        }
        default:
        {
            return super.onOptionsItemSelected(item);
        }
    }
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
    /* CODE TO OUTPUT SELECTED LISTVIEW VALUE */
}

// DISPLAY ACCOUNT LISTVIEW //
public void displayListView()
{
    account_details = new ArrayList<Account>();
    account_details = db.getAllAccounts();
    accountList.setAdapter(new ListViewBaseAdapter(account_details,this));
}
}

listview。xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dip" >

<TextView
    android:id="@+id/account_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:textColor="#00628B"
    android:textSize="22dp"
    android:textStyle="bold"/>

<TextView
    android:id="@+id/account_balance"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:textColor="#00628B"
    android:textSize="22dp"/>

</RelativeLayout>

共有3个答案

束向荣
2023-03-14

我想你有自己的自定义适配器。因此,您可以在getView()方法中将OnClickListeners附加到每个需要的视图(在您的例子中是TextView)。然后在此侦听器中执行以下操作:

View.OnClickListener() {
    @Override
    public void onClick(View v) {
        TextView myView = (TextView) v;
        Toast.makeText(context, myView.getText(),Toast.LENGTH_SHORT).show();
    }
}
鄢承运
2023-03-14

如果你只是想知道名字,那你为什么不试试这样的方法

  1. 定义一个包含一行的XML布局,每个行可能包含一个文本视图

代码如下所示:

String type=((TextView) view.findViewById(R.id.accountType)).getText();
姚鹤龄
2023-03-14

您需要为该行创建一个自定义适配器(和布局文件),然后为该行中的每个视图添加处理程序

Vogella有一些很棒的教程,所以我不会重复它们,我会告诉你。

 类似资料:
  • 我正在尝试将ArrayList中的一个值放入我的listView,下面是详细信息。 这是ArrayList信息的示例: 我想从用户ArrayList中获取州数据,例如,我只想获取“新墨西哥州”、“亚利桑那州”、“亚利桑那州”和“加利福尼亚州”的数据,并将其显示在我的listView中 如果可能的话,我还想删除副本并按升序排序 下面是我的代码 我知道我不应该在arrayAdapter中使用state

  • 问题内容: 这是我第一次接触android。我正在尝试向我的ListView添加项目。我使用“选项卡”,查看添加项目的唯一方法是更改​​选项卡,然后返回到第一个选项卡。 我到处搜寻,而且一直都找到 但对我不起作用。 正如我所说,我已经使用固定标签+滑动创建了项目。我只希望有一个列表视图,哪些行具有一个EditText,一个Spinner和一个Button。在用于选项卡的Fragment的底部,我有

  • 我只是为 而我得到一些错误 错误:(166,86)错误:不是抽象的并且没有覆盖OnItemLongClick(AdapterView, View, int, long)中的抽象方法OnItemLongClick(AdapterView, int, long)错误:(168,25)错误:onItemLongClick(AdapterView, View, int, long)中无法实现OnItemL

  • Android Horizontal ListView 是 Android 上一个水平滑动的 ListView 组件。

  • 本文向大家介绍Android 中ListView和GridView赋值错位,包括了Android 中ListView和GridView赋值错位的使用技巧和注意事项,需要的朋友参考一下 ListView和GridView多次调用getView的bug,导致赋值错位 最近总遇到写GridView适配器赋值时,最后一两个需定义其他图片时,赋图错误,原因就是适配器的getView多次调用,导致数据赋值错误

  • 问题内容: 我有一个ListView活动,该活动需要项目列表的页脚,以便您可以单击它,这会将更多项目加载到列表中。该列表由我的SimpleAdapter支持,该SimpleAdapter由字符串映射支持,并且在设置适配器之前,我这样做是为了添加页脚: 但是我在调​​试器中得到了这个异常 java.lang.NullPointerException android.widget.ListView.c