简体   繁体   English

应用程式从ListView实作崩溃

[英]App crashing from listview implementaion

I recently tried to create a custom row for listview. 我最近尝试为listview创建一个自定义行。 I tried to do it off a tutorial but it crashes when I tried to change it so the rows work with what I want my app to display. 我试图从一个教程中删除它,但是当我尝试更改它时它崩溃了,因此行与我希望我的应用程序显示的内容一起工作。 Error readout is at the bottom. 错误读数在底部。

Also not related to the problem but I was curious if I am able to use imageId as my holder in the custom adapter class for each of the 3 images I want to be in the row or if they need to be unique. 同样与问题无关,但是我很好奇我是否能够将imageId用作自定义适配器类中我想排成一行的3个图像中每个图像的持有人,或者它们是否需要唯一。
holder.img2.setImageResource(imageId[position]); holder.img2.setImageResource(imageId [position]);

-----Homeactivitylistview.java----------- ----- Homeactivitylistview.java -----------

public class HomeActivityListview extends AppCompatActivity {

    ListView lv;
    Context context;
    ArrayList dogName;
    ArrayList dogID;
    public static int [] dogImages={R.id.dogimage};
    public static String [] dogNames={};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_activity_listview);

        context=this;

        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, dogImages));
    }


    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);
    }

}

------------------- customadapter.java ------------------------- ------------------- customadapter.java -------------------------

public class CustomAdapter extends BaseAdapter{
String [] result;
Context context;
int [] imageId;
private static LayoutInflater inflater=null;
public CustomAdapter(HomeActivityListview homeActivityListview, int[]     dogImages) {
    // TODO Auto-generated constructor stub
    context=homeActivityListview;
    imageId=dogImages;
    inflater = ( LayoutInflater )context.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imageId.length;
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public class Holder
{

    ImageView img;
    ImageView img1;
    ImageView img2;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)             {
    // TODO Auto-generated method stub
    Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.home_single_row, null);
    holder.img=(ImageView) rowView.findViewById(R.id.dogimage);
    holder.img1=(ImageView) rowView.findViewById(R.id.dog1num1);
    holder.img2=(ImageView) rowView.findViewById(R.id.dog1num2);
    holder.img.setImageResource(imageId[position]);
    holder.img1.setImageResource(imageId[position]);
    holder.img2.setImageResource(imageId[position]);
    rowView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "You Clicked "+result[position],     Toast.LENGTH_LONG).show();
        }
    });
    return rowView;
}

}

----------------------singlerow.xml-------------------------- ---------------------- singlerow.xml ------------------------- --

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

<ImageButton
    android:layout_width="150dip"
    android:layout_height="150dip"
    android:id="@+id/dogimage"
    android:clickable="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@drawable/dogpic"
    android:onClick="sendProfile"/>

<ImageButton
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:id="@+id/dog1num1"
    android:background="@drawable/num1"
    android:clickable="true"
    android:onClick="NumberOne"
    android:layout_marginLeft="30dp"
    android:layout_marginTop="75dp" />

<ImageButton
    android:layout_width="75dip"
    android:layout_height="75dip"
    android:id="@+id/dog1num2"
    android:background="@drawable/num2"
    android:clickable="true"
    android:onClick="NumberTwo"
    android:layout_marginLeft="25dp"
    android:layout_marginTop="75dp" />

------------homescreen.xml------------------ ------------ homescreen.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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
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:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:textColor="#2c7134"
    android:text="Select a profile or make a post:"
    />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_above="@+id/newdogbutton"
    android:entries="@array/dogs"
    android:layout_below="@+id/selectprofiletext"
    android:layout_marginTop="10dip" />

<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:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:onClick="AddNewDog"
    />
</RelativeLayout>

------------------ Error readout ------------------------ ------------------错误读出------------------------

04-07 14:06:40.998 2532-2532/cs495capstone.edu.bsu.doggydid E/AndroidRuntime: FATAL EXCEPTION: main Process: cs495capstone.edu.bsu.doggydid, PID: 2532 android.content.res.Resources$NotFoundException: Resource "cs495capstone.edu.bsu.doggydid:id/dogimage" (7f0d008e) is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f0d008e} at android.content.res.Resources.loadDrawableForCookie(Resources.java:2390) at android.content.res.Resources.loadDrawable(Resources.java:2330) at android.content.res.Resources.getDrawable(Resources.java:758) at android.content.Context.getDrawable(Context.java:402) at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26) at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321) at android.support.v7.widget.TintManager.getDrawable(TintManager.java:175) at android.support.v7.widget.TintManager.getDrawable(TintManager.java:168) at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppComp 04-07 14:06:40.998 2532-2532 / cs495capstone.edu.bsu.doggydid E / AndroidRuntime:致命例外:主进程:cs495capstone.edu.bsu.doggydid,PID:2532 android.content.res.Resources $ NotFoundException:资源“ cs495capstone.edu.bsu.doggydid:id / dogimage”(7f0d008e)不是可绘制对象(颜色或路径):android.content.res上的TypedValue {t = 0x12 / d = 0x0 a = 2 r = 0x7f0d008e}。 android.content.res.Resources.loadDrawable(Resources.java:2330)的Resources.loadDrawableForCookie(Resources.java:2390)android.content.Context的android.content.res.Resources.getDrawable(Resources.java:758) android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)(位于android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)处的.getDrawable(Context.java:402)。 android.support.v7.widget.TintManager.getDrawable(TintManager.java:168)(位于android.support.v7.widget.AppCompatImageHelper.setImageResource(AppComp)上的support.v7.widget.TintManager.getDrawable(TintManager.java:175) atImageHelper.java:51) at android.support.v7.widget.AppCompatImageButton.setImageResource(AppCompatImageButton.java:73) at cs495capstone.edu.bsu.doggydid.CustomAdapter.getView(CustomAdapter.java:57) at android.widget.AbsListView.obtainView(AbsListView.java:2344) at android.widget.ListView.measureHeightOfChildren(ListView.java:1270) at android.widget.ListView.onMeasure(ListView.java:1182) at android.view.View.measure(View.java:17430) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.support.v7.widget.Ac atImageHelper.java:51)位于android.support.v7.widget.AppCompatImageButton.setImageResource(AppCompatImageButton.java:73)位于cs495capstone.edu.bsu.doggydid.CustomAdapter.getView(CustomAdapter.java:57)位于android.widget.AbsListView android.widget.ListView.measureHeightOfChildren(ListView.java:1270)的.obtainView(AbsListView.java:2344)android.widget.ListView.onMeasure(ListView.java:1182)的android.view.View.measure(View。于android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:727)处android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)处android.view.View.measure(View.java:17430)处android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)在android.widget.FrameLayout.onMeasure(FrameLayout.java:430)在android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)在android android.support.v7.widget.Ac上的.view.View.measure(View.java:17430)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) tionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) at android.view.View.measure(View.java:17430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560) at android.view.View.measure(View.java:17430) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001) at android.view.ViewRootImpl.measureHierar android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)上的tionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)在android.widget.FrameLayout.onMeasure(FrameLayout) .java:430),位于android.view.View.measure(View.java:17430),位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463),位于android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)在android.widget.LinearLayout.measureVertical(LinearLayout.java:722)在android.widget.LinearLayout.onMeasure(LinearLayout.java:613)在android.view.View.measure(View.java:17430)在android.view。 android.widget.FrameLayout.onMeasure(FrameLayout.java:430)上com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2560)上的ViewGroup.measureChildWithMargins(ViewGroup.java:5463) android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)上的.view.View.measure(View.java:17430)android.view.ViewRootImpl.measureHierar chy(ViewRootImpl.java:1166) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 04-07 14:07:2 chy(ViewRootImpl.java:1166)位于android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)位于android.view.ViewRootImpl $ TraversalRunnable.run(View .java:5779),位于android.view.Choreographer $ CallbackRecord.run(Choreographer.java:767),位于android.view.Choreographer.doCallbacks(Choreographer.java:580),位于android.view.Choreographer.doFrame(Choreographer.java: 550)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:753)在android.os.Handler.handleCallback(Handler.java:739)在android.os.Handler.dispatchMessage(Handler.java:95)在java.lang.reflect.Method.invoke(本机方法)处的android.app.ActivityThread.main(ActivityThread.java:5221)处的android.os.Looper.loop(Looper.java:135)。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)处的Method.invoke(Method.java:372)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)处的MethodAndArgsCaller.run(ZygoteInit.java:899) 04-07 14:07:2 3.942 2532-2532/cs495capstone.edu.bsu.doggydid I/Process: Sending signal. 3.942 2532-2532 / cs495capstone.edu.bsu.doggydid I / Process:正在发送信号。 PID: 2532 SIG: 9 PID:2532 SIG:9

You have to pass a drawable - 您必须通过绘画-

 holder.img.setImageResource(R.drawable.dogpic); holder.img1.setImageResource(R.drawable.dogpic); holder.img2.setImageResource(R.drawable.dogpic); 
public static int [] dogImages={R.id.dogimage};

You are passing Id, you should pass drawable instead. 您正在传递ID,而应该传递d​​rawable。

You should pass a drawable instead of id which usually represents a view.Replace your dogImage with suitable resource such as R.drawable.desired_name .Then in your getView() use it as 您应该传递一个drawable而不是通常代表一个视图的id。用适当的资源(例如R.drawable.desired_name然后在getView()中将其用作

holder.img.setimageResource(image[position]) 

or 要么

holder.img.setImageDrawable(ContextCompat.getDrawable(Context,image[position]))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM