2016-04-09 42 views
0

Listelenen bir öğenin arka planını liste görünümünde değiştirebiliyorum. Liste oluşturulduğunda ilk öğenin arka planının vurgulanmasını istiyorum. Bir "performItemClick" gerçekleştirmeye çalıştığımda aşağıdaki kod hata veriyor.Oluşturulduğunda liste görünümünün ilk öğesini vurgulayın

Dizi bağdaştırıcımdaki getView'imi değiştirmeye yönelik önerileri gördüm. Ancak, java kodumda MyCustomAdapter sınıfını oluşturmaya çalıştığımda Android.widget.ArrayAdapter'de varsayılan yapı hatası yok.

Bunu yapmak için ArrayAdapter sınıfımın bir uzantısını oluşturmanız gerekirse, nasıl bu hata dolaşırsınız. Ben önerilere açığım başka yolu varsa.

Teşekkür

package com.hofficer.aclsfast; 

import android.app.Activity; 
import android.content.pm.ActivityInfo; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 

import java.lang.reflect.Array; 

public class NarrowChild extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_narrow_child); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

     //fix orientation 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     //MyCustomAdapter adapter = new MyCustomAdapter(); 
     createList(); 
    } 
    /* 
    class MyCustomAdapter extends ArrayAdapter{ 

    }*/ 

    void createList(){ 
     String[] narrowChoices = {"aFib/Flutter", "Narrow Cmplx Tachycardia", "PSVT", "Junctional Tachycardia", "Multifocal Tachycardia"}; 

     ListAdapter theAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, narrowChoices); 
     final ListView listview = (ListView) findViewById(R.id.narrowListView); 

     listview.setAdapter(theAdapter); 

     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       //clear menu and highlight selected item 
       for (int i = 0; i < 5; i++) { 
        listview.getChildAt(i).setBackgroundColor(Color.WHITE); 
       } 
       listview.getChildAt(position).setBackgroundColor(Color.CYAN); 
      } 
     }); 
     Boolean result = listview.performItemClick(listview,0,0); //THIS GIVES ERROR NULL POINT EXCEPTION 
    } 
} 
+0

Bunun için bir CustomArrayAdpter kullanın? – Krish

+0

Bunu nasıl yaparım? Etkinlik sınıfım içinde bir sınıf yapmayı denedim, ancak ilk soruda bahsettiğim hatayı alıyorum. – imsmooth

+0

Gereksiniminiz, her zaman ilk satırı vurgulamaktır? – Krish

cevap

0

Şu anda test edemez ama sadece Boolean result = listview.performItemClick(listview,0,0); yerine listview.getChildAt(0).setBackgroundColor(Color.CYAN); çağırabilir

+0

Bunu denedim ama bir nullpoint hatası alıyorum. OnItemClick rutini içinden getChildAt'a erişebilirim, ancak hata olmadan başka bir yere erişemiyorum. – imsmooth

0

Bu deneyin:

Boolean result = listview.performItemClick(listview.getAdapter().getView(0),0,0); 

ya:

Boolean result = listview.performItemClick(listview.getAdapter().getView(0, null, null),0,0); 

bu question Bkz ve docs kontrol edin.

DÜZENLEME Ben senin sorunun getChildAt() yöntemi olduğunu düşünüyorum. this sorusuna bakmalısınız. MyCustomAdapter'inizde, ArrayAdapter'in bir veya daha fazla kurucusunu geçersiz kılmanız veya kendinizinkini oluşturmanız gerekir.

+0

Bunu önerdim ve önerilerindeki varyasyonları. Hala hayır şans. – imsmooth

1

ve özel Adapter örneğidir: sizin durumunuzda source

den

public class WeatherAdapter extends ArrayAdapter<Weather>{ 

    Context context; 
    int layoutResourceId; 
    Weather data[] = null; 

    public WeatherAdapter(Context context, int layoutResourceId, Weather[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     WeatherHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new WeatherHolder(); 
      holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon); 
      holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle); 

      row.setTag(holder); 
     } 
     else 
     { 
      holder = (WeatherHolder)row.getTag(); 
     } 

     Weather weather = data[position]; 
     holder.txtTitle.setText(weather.title); 
     holder.imgIcon.setImageResource(weather.icon); 

     return row; 
    } 

    static class WeatherHolder 
    { 
     ImageView imgIcon; 
     TextView txtTitle; 
    } 
} 

fazla bilgi bunu 0 ise konumunu kontrol ve istenen öğeyi döndürmek gerekir.

+0

Teşekkürler. Söylediklerine benzer bir şey yaptığını anladım. Yorumunuz çok yararlı ve zaman için teşekkür ederim. – imsmooth