java - Listview 适配器可以使用数组对象参数吗?

标签 java android

我不清楚 Android Studio 中 Listview 适配器的具体情况。

我见过很多使用它们的例子,但从未见过我想要的使用方式。

我试图用数组中同一类对象的参数填充 ListView 。

我有一个包含 2 个字符串参数和 1 个本地时间参数的对象数组。

到目前为止,我只看到了一些示例,其中它们赋予适配器的每个不同值都是单独数组的一部分。

我想做的,是为适配器提供来自同一数组的 3 个不同对象参数。

这可能吗?

我认为这是可能的,但我不知道该怎么做。

示例:

public class MainActivity extends AppCompatActivity {

    ListView myListView;
    String[] items;
    String[] prices;
    String[] descriptions;

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

        Resources res = getResources();
        myListView = (ListView) findViewById(R.id.myListView);
        items = res.getStringArray(R.array.items);
        prices = res.getStringArray(R.array.prices);
        descriptions = res.getStringArray(R.array.descriptions);

        ItemAdapter itemAdapter = new ItemAdapter(this, items, prices, 
        descriptions);
        myListView.setAdapter(itemAdapter);

这里的商品、价格和描述被声明为字符串数组,并在资源中实例化为 3 个字符串数组。稍后在 Adapter 类构造函数中引用它们。

相反,我希望它们指向的不是数组,而是单个数组中同一类对象的参数。

或者,如果这是不可能的,我可以从数组中获取所有对象的参数,并为每个对象创建一个单独的数组,但我觉得这是不必要的,并且必须有一个简单的方法来做到这一点,但我只是不知道该怎么做。

编辑: 我在 youtube 上找到了一个名为“Android Beginner Tutorial #8 - Custom ListView Adapter For Displaying Multiple Columns”的教程视频,这正是我正在寻找的内容。

最佳答案

您应该尝试使用 BaseAdapter。

import android.widget.ListAdapter;

public class ListAdapter extends BaseAdapter implements ListAdapter {
    private ArrayList<Object> list;
    private Context context;

    ListAdapter(ArrayList<Object> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int pos) {
        return list.get(pos);
    }

    @Override
    public long getItemId(int pos) {
        return 0L;
        //just return 0 if your list items do not have an Id variable.
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;

        return view;
    }
}

并将其调用到您的 Activity 中

public class MyActivity extends Activity {

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


        ArrayList<Object> myList= new ArrayList<>();

        //here you can add elements of type Object to your ListAdapter

        //instantiate custom adapter
        ListAdapter adapter = new ListAdapter(myList, this);

        //handle listview and assign adapter
        ListView lView = findViewById(android.R.id.list);
        lView.setAdapter(adapter);
    }

}

关于java - Listview 适配器可以使用数组对象参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176782/

相关文章:

java - mac 上的 Android Studio : cant find System compiler

java - SCP内存位置中的对象

java - Thymeleaf 输入表单绑定(bind)

java - 从父 Activity 中获取 fragment 中不同字段的值

android - "Add New Product"谷歌播放中缺少选项

android - 如何使用cordova android检测摇动事件?

android - Toast.makeText().show() 消息在 Activity-less 服务中去哪里?

java - 面板从 JFrame 中移除后如何处理 JPanel

java - 未知错误: call function result missing 'value' Appium Hybrid App

android - 从 Activity 添加标记到 fragment 映射