无法在listView上看到adapterArray信息

时间:2015-12-01 16:28:46

标签: java android listview android-arrayadapter broadcast

我有问题。我尝试在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上?

1 个答案:

答案 0 :(得分:1)

完成您要执行的操作的一种简单方法是创建自己的自定义ListView适配器。我想从你的代码中你要做的是将你的arraylist中的字符串添加到ListView中,以后可以查看。

自定义适配器的优点在于您可以控制ListView视图中的所有内容,并且可以以更有限的方式显示您想要的内容。以下是完成此操作的非常非常基本的示例。

主要活动XML

您可以看到我们在此布局文件中正在执行的操作是将listview声明为活动内部。

<?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

此类仅用于初始化和创建数据。我试图尽可能地模拟你的阵列,但这绝不是生成它们或设置它们的最佳方法,但是如果你确定你的数据是正确的,那么这将是正常的。

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的方式。当您初始创建此类时,您将自动生成几个重要的方法。可以说getView方法可能是这个类中最重要的方法之一。这是您实际设置各个行和视图的地方!

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创建列表视图的最佳方式,因为它可以为您提供更多控制和功能。您也可以通过这种方式轻松扩展应用程序,因为您只需要使用其他任何图像或任何您想要的内容来调整此类。

<强>资源

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

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