在listView上看不到adapterArray信息

Can't see the adapterArray information on listView

我有问题。我尝试在 listView 上显示一些信息,我使用 ArrayAdapter,但我什么也看不到。我把代码放在下面,希望对您有所帮助:

ListView listView = (ListView) findViewById(R.id.listView1);
ArrayList<String> arrayFinal = new ArrayList<String>();
for(int i = 0; i < idRocodromo.size(); i++)
{
    arrayFinal.add(idRocodromo.get(i) + " - " + rocodromo.get(i) + " - " + ciudad.get(i) + " - " + comentario.get(i));
}

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_expandable_list_item_1, android.R.id.text1, arrayFinal);


listView.setAdapter(itemsAdapter);

ArrayFinal 有信息,但它没有显示在 listView 上,谁能帮助我?可能是因为它在 BroadcastReciever 上?

完成您正在尝试做的事情的一种简单方法是创建您自己的自定义 ListView 适配器。我从你的代码中想象你想要做的是将你的 arraylist 中的字符串添加到你可以稍后查看的 ListView 中。

自定义适配器的好处在于您可以控制 ListView 视图中的所有内容,并且可以以更有限的方式准确显示您想要的内容。下面是一个非常非常基本的例子来完成这个。

主要ActivityXML

你可以看到我们在这个布局文件中所做的一切就是声明一个列表视图存在于我们的 Activity 中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />
</RelativeLayout>

单行XML

对于单个视图,我们可以随心所欲地变得复杂或简单。在这里,我只添加了一个 TextView,但您可以添加图像、声音、按钮,老实说,无论您想要什么!

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/textView" />
</LinearLayout>

MainActivity.java

这个class只是为了初始化和创建我们的数据。我试图尽可能最好地模拟您的阵列,但这绝不是生成或设置它们的最佳方式,但如果您确定您的数据是正确的,那么这将工作得很好。

public class MainActivity extends AppCompatActivity {

    public ArrayList mainArr,arrOne, arrTwo;
    private MyAdapter myAdapter;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        myAdapter = new MyAdapter(this, configureList());
        listView.setAdapter(myAdapter);
    }

    public ArrayList configureList(){
        arrOne = new ArrayList();
        arrTwo = new ArrayList();
        mainArr = new ArrayList();
        arrOne.add(0, "Joe");
        arrOne.add(1, "Phil");
        arrOne.add(2, "Jose");
        arrTwo.add(0, "Mexico City");
        arrTwo.add(1, "Minneapolis");
        arrTwo.add(2, "Pittsburgh");

        for(int i = 0; i < arrOne.size(); i++){
            mainArr.add(i, arrOne.get(i) + " - " + arrTwo.get(i));
        }
        return  mainArr;
     }
}

自定义适配器

这是我们真正创建新适配器的地方。这个适配器是我们将如何使用数据和信息生成和格式化我们的 ListView 的方式。当您最初创建此 class 时,您将自动生成几个重要的方法。可以说 getView 方法可能是这个 class 中最重要的方法之一。这是您实际设置个人行和视图的地方!

public class MyAdapter extends BaseAdapter {
    private ArrayList myData;
    private Context mContext;

    public MyAdapter(Context context, ArrayList data){
        this.myData = data;
        this.mContext = context;
    }

    //I tell you how big and how many rows are going to be in the listview.
    @Override
    public int getCount() {
        return myData.size();
    }

    //I will return the object at an exact posiition in the listview.
    @Override
    public Object getItem(int position) {
        return myData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    /*
    I create and configure the views for you! You can see here that we are taking a view, inflating it to our single row
    that we created earlier and then we can reference the textview or whatever else we want!
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;
    if(convertView == null){
        view = View.inflate(mContext, R.layout.single_row, null);
    }
    TextView txt = (TextView)view.findViewById(R.id.textView);
    txt.setText(myData.get(position).toString());
    return view;
    }
}

这将是 IMO 创建列表视图的最佳方式,因为它可以为您提供更多控制和功能。您也可以通过这种方式轻松扩展您的应用程序,因为您只需要使用任何其他图像或您想要的任何东西来调整此 class。

资源

http://www.vogella.com/tutorials/AndroidListView/article.html

http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/