简体   繁体   English

Android-如何使用自定义ArrayAdapter从ListView内部实现意图

[英]Android - How to make an intent work from inside a ListView using a custom ArrayAdapter

I have this problem that whenever i click on the listView OnItemClick method it always crashes when it is trying to reach another intent down below i leave some code. 我有一个问题,就是当我单击listView OnItemClick方法时,它总是在试图达到另一个意图时崩溃,而我却留下了一些代码。

public class SelectFichas extends AppCompatActivity {
TextView tv;
ListView lv;
RecyclerView.LayoutManager mLayoutManager;
ImageButton btn1;
ArrayList<Ficha> slFichas;
List<Ficha> ftchArray;
DBHelper db;
 MyAdapter aAdapt = null;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select_ficha);
    btn1 = (ImageButton) (findViewById(R.id.rg));
    lv = (ListView) (findViewById(R.id.lv1));
    db = new DBHelper(this);
    try {
        //Verificamos que la base de datos no este vacia
        if (!db.isEmpty()) {
            ftchArray = db.getAllFichas();
            slFichas = new ArrayList<Ficha>();
            for (Ficha fi : ftchArray) {
                slFichas.add(fi);

            }

            // mAdapter = new MyAdapter(ftchArray,getApplication());
             aAdapt = new MyAdapter(SelectFichas.this,0,slFichas);

            View header =  getLayoutInflater().inflate(R.layout.list_header, null);
            lv.addHeaderView(header);
            lv.setAdapter(aAdapt);
            lv.setItemsCanFocus(false);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick( AdapterView<?> parent,  View view, int position, long id) {
                    Ficha fi =  (Ficha) aAdapt.getItem(position-1);
                    String sel = fi.getPreg();
                    String[] opc = {"Actualizar", "Borrar", "Adivinar", "Atras"};
                    Toast.makeText(getApplicationContext(), "Usted selecciono " +sel, Toast.LENGTH_SHORT).show();

                    final Intent intent = new Intent(SelectFichas.this,UpdFicha.class);
                    Handler h = new Handler();
                    h.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            if (intent.resolveActivity(getPackageManager()) != null){
                                startActivity(intent);

                            }
                        }
                    }, 2000);

I also used a custom ArrayAdapter for my ListView is that influencing, in case i will leave some code about the adapter below. 我还对ListView使用了自定义ArrayAdapter来影响这种情况,以防万一我在下面留下有关适配器的一些代码。

public class MyAdapter extends ArrayAdapter<Ficha> {
private Context context;
private ArrayList<Ficha> ficha;

public MyAdapter(Context context, int resource, ArrayList<Ficha> objects) {
    super(context, resource, objects);
    this.context = context;
    this.ficha = objects;
}


@Override
public View getView(int position, View convertView, ViewGroup parent){
    Ficha fi = ficha.get(position);
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    View view = inflater.inflate(R.layout.list_items, parent,false);
    RelativeLayout rv = (RelativeLayout)(view.findViewById(R.id.relativeLayout));
    TextView id = (TextView)view.findViewById(R.id.id_view);
    TextView preg = (TextView)view.findViewById(R.id.preg_view);
    TextView ans = (TextView) view.findViewById(R.id.answer_view);

    id.setText(String.valueOf(fi.getId()));
    preg.setText(fi.getPreg());
    ans.setText(fi.getRes());
    return view;

}

} }

Here is my Logcat EDITED 这是我的Logcat 编辑

    2-05 11:52:06.886 5997-5997/com.giamp.fichas W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x9ccbcb20)
12-05 11:52:06.886 5997-5997/com.giamp.fichas E/AndroidRuntime: FATAL EXCEPTION: main
                                                                Process: com.giamp.fichas, PID: 5997
                                                                java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
                                                                    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
                                                                    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
                                                                    at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)
                                                                    at android.widget.Spinner.onMeasure(Spinner.java:482)
                                                                    at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:416)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
                                                                    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                                    at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:389)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                                    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
                                                                    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
                                                                    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                                                                    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
                                                                    at android.view.View.measure(View.java:16497)
                                                                    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
                                                                    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
                                                                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
                                                                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
                                                                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
                                                                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                                                                    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                                                                    at android.view.Choreographer.doFrame(Choreographer.java:544)
                                                                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
                                                                    at android.os.Handler.handleCallback(Handler.java:733)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                    at android.os.Looper.loop(Looper.java:136)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5017)
                                                                    at java.lang.reflect.Method.invokeNative(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:515)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                    at dalvik.system.NativeStart.main(Native Method)
                                                                 Caused by: java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
                                                                    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)
                                                                    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
                                                                    at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193) 
                                                                    at android.widget.Spinner.onMeasure(Spinner.java:482) 
                                                                    at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:416) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
                                                                    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
                                                                    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
                                                                    at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:389) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
                                                                    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
                                                                    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
                                                                    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
                                                                    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
                                                                    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
                                                                    at android.view.View.measure(View.java:16497) 
                                                                    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
                                                                    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
                                                                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
                                                                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
                                                                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
                                                                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
                                                                    at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
                                                                    at android.view.Choreographer.doFrame(Choreographer.java:544) 
                                                                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
                                                                    at android.os.Handler.handleCallback(Handler.java:733) 
                                                                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                    at android.os.Looper.loop(Looper.java:136) 
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5017) 
                                                                    at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                    at java.lang.reflect.Method.invoke(Method.java:515)

AdapterView<?> parent is not an Adapter , but it is a ViewGroup . AdapterView<?> parent不是Adapter ,但它是ViewGroup

change 更改

ArrayAdapter<Ficha> aAdapt = new MyAdapter(SelectFichas.this, 0, slFichas);

to

final MyAdapter aAdapt = new MyAdapter(SelectFichas.this, 0, slFichas);

and

Ficha fi = (Ficha) parent.getItemAtPosition(position);

to

Ficha fi = (Ficha) aAdapt.getItem(position);

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

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