从RecyclerView作为字符串接收的数组中的ListView

时间:2019-03-09 23:29:27

标签: java android arrays listview

我有一个主要活动,该活动有一个Recyclerview,它显示一个列表图像和一个文本作为标题。

在主要活动中,我有三个数组列表;一个用于图像,一个用于标题,最后一个“数组”用于String数组。

我将R.array.id作为字符串传递到MainActivity中某个项目的“单击”上。我发送图像,标题和array

在第二个Activity中,我检查传入的意图,将它们分配给字符串。

String imageUrl = getIntent().getStringExtra("image_url");
String imageName = getIntent().getStringExtra("image_name");
String array= getIntent().getStringExtra("array_id");

然后我调用了setArray(array),然后在函数中被卡住了。

private void setArray(String array) {
    // Stuck here 
}

我不知道该怎么办。我在第二个布局中设置了ListView 并在此网站上找到此代码。

ListView lv = (ListView) findViewById(R.id.extView);
ArrayAdapter<CharSequence> aa = ArrayAdapter.createFromResource(this, R.array.id, android.R.layout.simple_list_item_1);
lv.setAdapter(aa);

如果我将源设置为静态数组ID,那该怎么做,但是如何设置接收到的字符串呢?

尝试getString(array),此方法无效。我还需要为项目设置onClick侦听器。

1 个答案:

答案 0 :(得分:0)

要在ListView中显示数组,需要有一个自定义适配器。当前使用的ArrayAdapter是用于显示Android SDK提供的列表的本机适配器。但是,如果需要显示ListView来自数组动态填充项目,则需要一个自定义类。

为此,您需要具有类似以下内容的自定义适配器类。

public class ListAdapter extends ArrayAdapter<String> {

    private int resourceLayout;
    private Context mContext;

    public ListAdapter(Context context, int resource, List<String> items) {
        super(context, resource, items);
        this.resourceLayout = resource;
        this.mContext = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;

        if (v == null) {
            LayoutInflater vi;
            vi = LayoutInflater.from(mContext);
            v = vi.inflate(resourceLayout, null);
        }

        String p = getItem(position);

        if (p != null) {
            TextView tt1 = (TextView) v.findViewById(R.id.id);
            tt1.setText(p.getId());
        }

        return v;
    }
}

现在,您需要一个布局来指示列表中的每个项目。例如,布局的名称为list_item.xml

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

    <TextView
        android:id="@+id/id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:height="40sp" />
</LinearLayout>

现在,在第二个Activity中,您需要初始化适配器并在ListView中设置适配器,如下所示。请注意,由于适配器采用List,因此您需要将array字符串从String转换为List,然后将其传递给适配器。

// I assume, the String is comma separated, which indicates the array.
List<String> arrayList = Arrays.asList(array.split("\\s*,\\s*"));

ListView lv = (ListView) findViewById(R.id.extView);
ListAdapter customAdapter = new ListAdapter(this, R.layout.list_item, arrayList);
lv.setAdapter(customAdapter);

希望有帮助!