【问题标题】:how can I let the array list to be clickable?如何让数组列表可点击?
【发布时间】:2019-03-17 09:08:51
【问题描述】:

我正在尝试将此列表处理为可点击。 当我设置一个意图活动时,它不起作用所以我如何处理这个数组列表中的每个元素。 错误是当我按下这个数组列表中的任何元素时,它让我回到了我给它的最后一个意图。

package com.adnan.android.autofix;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.view.menu.MenuView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;

import java.net.Inet4Address;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements {

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

        // Array list content
        ArrayList<String> CarsBrand = new ArrayList<String>();
        CarsBrand.add("Alfa Romeo");
        CarsBrand.add("Audi");
        CarsBrand.add("BMW");
        CarsBrand.add("Brilliance");
        CarsBrand.add("BYD");
        CarsBrand.add("Changan");
        CarsBrand.add("Chery");
        CarsBrand.add("Chevorlet");
        CarsBrand.add("Chrysler");
        ArrayAdapter<String> CarsBrandAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, CarsBrand);

        GridView listView = (GridView) findViewById(R.id.ListCarsBrands);

        listView.setAdapter(CarsBrandAdapter);

        // handling the array list
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent AlfaRomeoIntent = new Intent(MainActivity.this, AlfaRomeo.class);
                startActivity(AlfaRomeoIntent);

                Intent AudiIntent = new Intent(MainActivity.this, com.adnan.android.autofix.Audi.class);
                startActivity(AudiIntent);
            }
        });


    }
}

【问题讨论】:

  • 请添加错误日志
  • 一个 ArrayList 不是一个 UI 组件,你怎么想象它是可点击的?您还应该阅读 Java 中的命名约定,这将使您的代码更容易遵循/理解
  • 您无法通过单击按钮启动 2 个活动。它只会打开最后一个通过的意图
  • 那我该怎么办?
  • 你想做什么能详细点吗?

标签: java android listview arraylist


【解决方案1】:

也许您可以将列表项映射到它们相应的活动类,如下所示:

package com.adnan.android.autofix;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.view.menu.MenuView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;

import java.net.Inet4Address;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements {
    HashMap<String, Class> intentMap ;
    ArrayList<String> CarsBrand;

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

        // Array list content
        CarsBrand = new ArrayList<String>();
        CarsBrand.add("Alfa Romeo");
        CarsBrand.add("Audi");
        CarsBrand.add("BMW");
        CarsBrand.add("Brilliance");
        CarsBrand.add("BYD");
        CarsBrand.add("Changan");
        CarsBrand.add("Chery");
        CarsBrand.add("Chevorlet");
        CarsBrand.add("Chrysler");
        ArrayAdapter<String> CarsBrandAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, CarsBrand);

        intentMap = new HashMap<String, Class>()
        {{
        put("Alfa Romeo", AlfaRomeo.class);
        put("Audi", Audi.class);
        // PUT ALL STRING-CLASS PAIRS LIKE THIS

        }};

        GridView listView = (GridView) findViewById(R.id.ListCarsBrands);

        listView.setAdapter(CarsBrandAdapter);

        // handling the array list
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Class selectedIntentClass = intentMap.get(CarsBrand.get(position));
                    Intent intent = new Intent(MainActivity.this, selectedIntentClass);
                    startActivity(intent);
                }
            });
        }
    }

【讨论】:

【解决方案2】:

你可以这样尝试:

package com.adnan.android.autofix;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.view.menu.MenuView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;

import java.net.Inet4Address;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements {

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

        // Array list content
        ArrayList<String> CarsBrand = new ArrayList<String>();
        CarsBrand.add("Alfa Romeo");
        CarsBrand.add("Audi");
        CarsBrand.add("BMW");
        CarsBrand.add("Brilliance");
        CarsBrand.add("BYD");
        CarsBrand.add("Changan");
        CarsBrand.add("Chery");
        CarsBrand.add("Chevorlet");
        CarsBrand.add("Chrysler");
        ArrayAdapter<String> CarsBrandAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, CarsBrand);

        GridView listView = (GridView) findViewById(R.id.ListCarsBrands);

        listView.setAdapter(CarsBrandAdapter);

        // handling the array list
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final String item = (String)parent.getItemAtPosition(position);
                switch (item) {
                    case "Alfa Romeo":
                        Intent AlfaRomeoIntent = new Intent(MainActivity.this, AlfaRomeo.class);
                        startActivity(AlfaRomeoIntent);
                        break;
                    case "Audi":
                        Intent AudiIntent = new Intent(MainActivity.this, com.adnan.android.autofix.Audi.class);
                        startActivity(AudiIntent);
                        break;
                }
            }
        });


    }
}

【讨论】:

  • 将此 final String item = (String)parent.getItemAtPosition(position) 更改为 String item = CarsBrand.get(position) 但您应首先将您的 CarsBrand 声明为全局字段
  • 我已经更新了我的代码,现在它工作正常。我已经检查并得到了正确的答复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2018-10-02
  • 1970-01-01
  • 2021-07-02
  • 2020-11-23
  • 1970-01-01
相关资源
最近更新 更多