我尝试按照幻灯片youtube 6部分教程创建一个带有自定义行的列表视图。在他的教程中,他使用了1个图像和2个文本视图,我需要3个图像和3个文本视图,当我运行应用程序时,它在尝试加载列表视图时崩溃。
-------------家庭单行.xml-----------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lilly"
android:textColor="#2c7134"
android:textStyle="bold"
android:id="@+id/dogName"
android:textSize="24dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/dogimage"
android:layout_width="150dip"
android:layout_height="150dip"
android:layout_alignParentLeft="true"
android:clickable="true"
android:onClick="sendProfile"
android:scaleType="fitXY"
android:src="@drawable/lilly"
android:background="?attr/selectableItemBackground" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Timestamp 1"
android:textColor="#2c7134"
android:id="@+id/timestamp1"/>
<ImageButton
android:id="@+id/dog1num1"
android:layout_width="75dip"
android:layout_height="75dip"
android:layout_marginLeft="10dp"
android:clickable="true"
android:onClick="NumberOne"
android:scaleType="fitXY"
android:src="@drawable/num1"
android:background="?attr/selectableItemBackground" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Timestamp 1"
android:textColor="#2c7134"
android:id="@+id/timestamp2"/>
<ImageButton
android:id="@+id/dog1num2"
android:layout_width="75dip"
android:layout_height="75dip"
android:layout_marginLeft="10dp"
android:clickable="true"
android:onClick="NumberOne"
android:scaleType="fitXY"
android:src="@drawable/num2"
android:background="?attr/selectableItemBackground"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
- Homelistview.xml -
<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="cs495capstone.edu.bsu.doggydid.HomeActivityListview
"
android:background="@drawable/screenbackground">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/selectprofiletext"
android:textColor="#2c7134"
android:text="Select a profile or make a post:"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:entries="@array/dogs"
android:layout_below="@id/selectprofiletext"
android:layout_above="@+id/newdogbutton" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add new dog"
android:id="@+id/newdogbutton"
android:background="#2c7134"
android:allowUndo="true"
android:textColor="#f3ca83"
android:clickable="true"
android:onClick="AddNewDog"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
Homeactivitylistview.java
public class HomeActivityListview extends AppCompatActivity {
ListView list;
Context context;
ArrayList dogName;
ArrayList dogID;
int [] dogImages = {R.drawable.lilly, R.drawable.dogpic};
public static int [] dogNames={R.id.dogName, R.id.dogName};
int [] num1={R.id.dog1num1, R.id.dog1num1, R.id.dog1num1, R.id.dog1num1, R.id.dog1num1};
int [] num2={R.id.dog1num2, R.id.dog1num2, R.id.dog1num2, R.id.dog1num2, R.id.dog1num2};
String[] names;
String[] timestamp1;
String[] timestamp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_activity_listview);
Resources res = getResources();
names=res.getStringArray(R.array.names);
timestamp1=res.getStringArray(R.array.timestamps1);
timestamp2=res.getStringArray(R.array.timestamps2);
context=this;
list =(ListView) findViewById(R.id.listView);
dogAdapter adapter=new dogAdapter(this, names, dogImages, num1, num2, timestamp1, timestamp2);
list.setAdapter(adapter);
}
class dogAdapter extends ArrayAdapter<String>
{
Context context;
int[] dogImages;
int[] num1;
int[] num2;
String[] nameArray;
String[] timestamp1Array;
String[] timestamp2Array;
dogAdapter(Context c, String[] names, int imgs[], int numb1[], int numb2[], String[] time1, String[] time2)
{
super(c,R.layout.home_single_row,R.id.dogName,names);
this.context=c;
this.dogImages=imgs;
this.num1=numb1;
this.num2=numb2;
this.nameArray=names;
this.timestamp1Array=time1;
this.timestamp2Array=time2;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row=inflater.inflate(R.layout.home_single_row,parent, false);
ImageView dogImg=(ImageView) row.findViewById(R.id.dogimage);
ImageView img1=(ImageView) row.findViewById(R.id.dog1num1);
ImageView img2=(ImageView) row.findViewById(R.id.dog1num2);
TextView name=(TextView) row.findViewById(R.id.dogName);
TextView time1=(TextView) row.findViewById(R.id.timestamp1);
TextView time2=(TextView) row.findViewById(R.id.timestamp2);
dogImg.setImageResource(dogImages[position]);
img1.setImageResource(dogImages[position]);
img2.setImageResource(dogImages[position]);
name.setText(nameArray[position]);
time1.setText(timestamp1Array[position]);
time2.setText(timestamp2Array[position]);
return row;
}
}
public void sendProfile(View view) {
Intent intent = new Intent(getApplicationContext(), DogProfileActivity.class);
startActivity(intent);
}
public void NumberOne(View view) {
AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
alertDlg.setMessage("Confirm Dog went number one");
alertDlg.setCancelable(false);
alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//HomeActivity.super.onBackPressed();
}
});
alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
//HomeActivity.super.onBackPressed();
}
});
alertDlg.create().show();
}
public void NumberTwo(View view) {
AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
alertDlg.setMessage("Confirm Dog went number two");
alertDlg.setCancelable(false);
alertDlg.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//HomeActivity.super.onBackPressed();
}
});
alertDlg.setNegativeButton("Change", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
//HomeActivity.super.onBackPressed();
}
});
alertDlg.create().show();
}
public void AddNewDog(View view) {
Intent intent = new Intent(getApplicationContext(), NewDogActivity.class);
startActivity(intent);
}
}
04-22 15:49:36.597 28628-28628/cs495capstone.edu.bsu.doggydid E/Android runtime:致命异常:主进程:cs 495 capstone . edu . bsu . doggydid, PID:28628 Java . lang . out of memory error:无法分配4194316字节分配738608可用字节和721KB直到OOM在dal vik . system . VM runtime . newnonmovablearray(本机方法)在Android . graphics . bitmapfactory . bitmapfactory . decodestream(本机方法)在Android . graphics . bitmapfactory . Java:856 . decodestream(bitmapfactory . Java:856 在Android . widget . listview . measureheightofchildren(listview . Java:1305)在Android . widget . listview . on measure(listview . Java:1212)在Android . view . view . measure(view . Java:20151)在Android . widget . relative layout . measure child horizontal(relative layut . Java:716)在Android . widget . relative layout . on measure(relative layout . Java:462)在Android . view . view . view . measure(view
你错过了:
list.setAdapter(dogAdapter);
setAdapter()设置此ListView后面的数据。传递给此方法的适配器可以由WrapperListAdapter包装,具体取决于当前使用的ListView功能。例如,添加页眉和/或页脚将导致适配器被换行。
我认为视频中没有解释这一点!
//Get ListView reference.
list =(ListView) findViewById(R.id.listView);
//create the Adapter instance.
dogAdapter adapter=new dogAdapter(this, names, dogImages, num1, num2, timestamp1, timestamp2);
//Set the adapter to the ListView!
list.setAdapter(dogAdapter);
问题内容: 这是我遵循的使用自定义Listview适配器的教程。我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出 更新的代码: 问题答案: 环顾四周,似乎是使用数组初始化适配器。请参阅带有ArrayAdapter.remove的UnsupportedOperationException和无法在ListView中修改ArrayAdapter:UnsupportedOperationExcep
我正在尝试将ListView与fragmnet中的自定义适配器(baseAdapter)一起使用。 当我直接在MainActivity中使用此代码时,一切正常,但当我在片段中使用此代码时,它没有崩溃,但它没有显示任何内容,它只是一个空白片段。另外,当我尝试使用简单的arrayAdapter在片段中绑定一个textView时,它工作得很好,所以我认为问题将出现在我的自定义适配器中。 为什么不显示Li
问题内容: 我有一个使用自定义适配器的ListView,如下所示: 布局非常简单,因此除非有人认为它们相关,否则我不会发布它们。 问题是某些CheckBoxes没有响应。似乎是第一次显示布局时可见的内容。您必须向下滚动才能正常工作的任何内容。 任何指针表示赞赏。 问题答案: 答案中的代码有效,但效率很低(实际上,您可以看到它,只需滚动并检查即可看到垃圾收集器正在工作)。下面是一种改进的回收视图的方
我有一个ListView和一个自定义适配器。问题是我看不到listview和数据,只看到一个白色页面。 在片段中我有: 在CustomAdapter中,我有: 我错在哪里? 更新: 谢谢,如果我想在ImageButton上设置onClickListener,我该怎么做?。。我尝试: 但问题是,当我单击例如第一个项目viewHolder时。mNomeView。getText()。toString()
问题内容: 我看了以下网站: ListView示例 其中描述了如何在使用默认适配器的列表视图中实现搜索功能,并且效果很好。 如何修改它,以便可以将其用于列表视图的自定义适配器? 部分代码为: 问题答案: 您需要覆盖适配器内部的getFilter并返回您创建的新的customFilter对象。看到这个答案: 编辑:
英文原文:http://emberjs.com/guides/models/customizing-adapters/ 在Ember Data中,处理与后台数据仓库通信的逻辑是通过Adapter来完成的。Ember Data适配器内置了一些关于REST API的假定。如果后台的实现与Ember Data假定的惯例不同,那么通过扩展缺省的适配器可能很容易的实现。 有时因为一些原因需要自定义适配器,例