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