Есть ли способ добавить два текстовых представления в arrayadapter?

Я хочу использовать два textviews рядом в моем listview, а также хочу выполнить поиск по ним. Есть ли способ сделать это без создания нового класса? Вот что я сделал до сих пор:

public class MainActivity extends Activity {
final String[] elename ={"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium","Iodine","Xenon","Caesium","Barium","Lanthanum","Cerium","Praseodymium","Neodymium","Promethium","Samarium","Europium","gadoliium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium","Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium","Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium","Copernicium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium"};
final String[] nos = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118"};

ArrayAdapter<String> adapter;

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


    adapter = new ArrayAdapter<String>(this, R.layout.list_item,R.id.element_name, elename);
    final EditText searchBar = (EditText) findViewById(R.id.searchbar);
    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
    final ListView navList = (ListView) findViewById(R.id.left_drawer);
    final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.left_drawer_layout);
    navList.setAdapter(adapter);


    navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
            //Change view according to numbers

            drawer.closeDrawer(linearLayout);
        }
    });

    //filter list view after search instantly
    searchBar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {

        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    //hide the keyboard after search on touch list view
    navList.setOnScrollListener(new AbsListView.OnScrollListener() {
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            //hide keyboard
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(navList.getWindowToken(), 0);
        }

        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    });

    navList.setEmptyView(findViewById(R.id.empty));

  }
}

Линия:

adapter = new ArrayAdapter<String>this,R.layout.list_item,R.id.element_name,elename); 

присвойте значение final String[] elename textview в моем макете. Итак, есть ли способ добавить еще один textview и присвоить ему значение final String[] nos в той же строке или без создания нового класса?

Извините, если это глупый вопрос, но я новичок!

РЕДАКТИРОВАТЬ: Сбой logcat

java.lang.NullPointerException
    at com.example.navigationdrawer.CustomAdapter.getView(CustomAdapter.java:34)
    at android.widget.AbsListView.obtainView(AbsListView.java:1592)
    at android.widget.ListView.makeAndAddView(ListView.java:1782)
    at android.widget.ListView.fillDown(ListView.java:705)
    at android.widget.ListView.fillFromTop(ListView.java:762)
    at android.widget.ListView.layoutChildren(ListView.java:1633)
    at android.widget.AbsListView.onLayout(AbsListView.java:1422)
    at android.view.View.layout(View.java:7175)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
    at android.view.View.layout(View.java:7175)
    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:702)
    at android.view.View.layout(View.java:7175)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    at android.view.View.layout(View.java:7175)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
    at android.view.View.layout(View.java:7175)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1146)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)

РЕДАКТИРОВАТЬ: Сбой MainActivity

java.lang.NullPointerException
    at com.Chinmay.navigationdrawer.MainActivity$2.onTextChanged(MainActivity.java:66)
    at android.widget.TextView.sendOnTextChanged(TextView.java:6584)
    at android.widget.TextView.handleTextChanged(TextView.java:6631)
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6775)
    at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
    at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
    at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:654)
    at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:415)
    at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:328)
    at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:79)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)

Новая обновленная основная активность:

public class MainActivity extends Activity {
final String[] elename ={"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium","Iodine","Xenon","Caesium","Barium","Lanthanum","Cerium","Praseodymium","Neodymium","Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium","Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium","Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium","Roentgenium","Copernicium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium"};
final String[] nos = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118"};
CustomAdapter cus;

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

    final EditText searchBar = (EditText) findViewById(R.id.searchbar);
    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
    final ListView navList = (ListView) findViewById(R.id.left_drawer);
    final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.left_drawer_layout);
    CustomAdapter cus = new CustomAdapter(MainActivity.this,elename,nos);
    navList.setAdapter(cus);


    navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
            //Change view according to numbers

            drawer.closeDrawer(linearLayout);
        }
    });

    //filter list view after search instantly
    searchBar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.cus.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {

        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    //hide the keyboard after search on touch list view
    navList.setOnScrollListener(new AbsListView.OnScrollListener() {
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            //hide keyboard
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(navList.getWindowToken(), 0);
        }

        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }
    });

    navList.setEmptyView(findViewById(R.id.empty));

}
}

person user3234390    schedule 27.01.2014    source источник
comment
да, вы можете stackoverflow.com/questions/16062569/.   -  person Raghunandan    schedule 27.01.2014
comment
@Raghunandan, не могли бы вы опубликовать код со ссылкой на мой вопрос, чтобы его было легче понять, поскольку у меня 118 значений в моих elename и nos.   -  person user3234390    schedule 27.01.2014
comment
Пожалуйста, прочитайте документы и используйте ссылку в качестве ссылки. если вы просите полный код, извините, я не могу помочь   -  person Raghunandan    schedule 27.01.2014
comment
нет, я не прошу полный код, сэр, я прошу, какой метод переопределить и где.   -  person user3234390    schedule 27.01.2014
comment
см. ссылку, размещенную переопределить getView   -  person Raghunandan    schedule 27.01.2014
comment
но у меня нет getview в моем коде!   -  person user3234390    schedule 27.01.2014
comment
ArrayAdapter имеет. см. документы. developer.android.com/reference/android/widget/   -  person Raghunandan    schedule 27.01.2014
comment
Ага попробую! так что это должно быть что-то вроде этого: @Override public View getView(context, android.R.layout.simple_list_item_1, android.R.id.text1,android.R.layout.simple_list_item_2, android.R.layout.text2, navList) или я должен раздуть представление как задано ">здесь   -  person user3234390    schedule 27.01.2014
comment
дайте мне знать, если вы столкнетесь с трудностями, я помогу   -  person Raghunandan    schedule 27.01.2014


Ответы (1)


http://developer.android.com/reference/android/widget/ArrayAdapter.html

Вы можете сделать, как показано ниже, из ответа Патрика @ Как построить и отобразить информацию в simple_list_item_2?

new ArrayAdapter (context, android.R.layout.simple_list_item_2, android.R.id.text1, list)
  {
    public View getView(int position, View convertView, ViewGroup parent) {
      View view = super.getView(position, convertView, parent);
      TextView text1 = (TextView) view.findViewById(android.R.id.text1);
      TextView text2 = (TextView) view.findViewById(android.R.id.text2);
      text1.setText(elename[positon]);
      text2.setText(nos[position]);
      return view;
    }
  });

Или используйте CustomAdapter, расширяющий ArrayAdapter

  class CustomAdapter extends ArrayAdapter<String>
  {
       String A[],B[];
       LayoutInfalter mInfalter;    
       public CustomAdapter(Context context, String[] A,String B[])
       {
          super(context,R.layout.customlayout,A);
          this.A = A;
          this.B = B;
          mInfalter = LayoutInfalter.from(context);
       }   
        public View getView(int position, View convertView, ViewGroup parent) {
          ViewHolder holder;
          if(convertView==null)
          {
               convertView = mInflater.inflate(R.layout.customlayout,parent,false);
               holder = new ViewHolder();
               holder.tv1 = (TextView)convertView.findViewById(R.id.textView1); 
               holder.tv2 = (TextView)convertView.findViewById(R.id.textView2);  
               convertView.setTag(holder); 
          }else{
                holder = (ViewHolder)convertVire.getTag();
          } 

                holder.tv1.setText(A[positon]);
                holder.tv2.setText(B[position]);
          return convertVIew;
    }
    static class ViewHolder
    {
        TextView tv1,tv2;
    }    
  }

Имейте макет customlayout.xml с 2 текстовыми представлениями с идентификатором textView1 и textView 2 соответственно.

Затем

 CustomAdapter cus = new CustomAdapter(ActivityName.this,elename,nos);
 navList.setAdapter(cus);
person Raghunandan    schedule 27.01.2014
comment
@ user3234390, где у вас есть предыдущий код адаптера. Вам нужно прочитать документы - person Raghunandan; 27.01.2014
comment
@user3234390 user3234390 вы все еще не знаете, куда поместить код, увидев редактирование - person Raghunandan; 27.01.2014
comment
очень жаль. были проблемы с подключением к сети. Я пробую это прямо сейчас! - person user3234390; 27.01.2014
comment
@user3234390 user3234390, так что теперь? работает или не работает?? - person Raghunandan; 27.01.2014
comment
просто дай мне 2 минуты. Обязательно скажу результат! - person user3234390; 27.01.2014
comment
Его принудительное закрытие. Вот трассировка стека: java.lang.NullPointerException - person user3234390; 27.01.2014
comment
@ user3234390 укажите строку, просмотрев вызванную часть в logcat. также какой метод вы использовали первый или второй? - person Raghunandan; 27.01.2014
comment
Я использовал второй метод. - person user3234390; 27.01.2014
comment
@ user3234390 что такое строка 34 CustomAdapter.java - person Raghunandan; 27.01.2014
comment
строка 34 holder.tv1.setText(A[position]); - person user3234390; 27.01.2014
comment
@user3234390 user3234390 у вас есть макет под названием mylayout с двумя текстовыми представлениями с идентификаторами textView1 и textView2? - person Raghunandan; 27.01.2014
comment
Я понял свою ошибку, сэр! - person user3234390; 27.01.2014
comment
@user3234390 user3234390, который, как я думал, был легким для вас, поэтому я не публикую то же самое. прочитайте мой ответ еще раз. если вы не инициализируете, вы окажетесь в NPE. - person Raghunandan; 27.01.2014
comment
но теперь он разбился, когда я что-то набираю в текстовом виде. - person user3234390; 27.01.2014
comment
@ user3234390 этого не будет. опубликуйте обновленный код и обновленную трассировку стека и укажите строку сбоя. Нечего печатать. список является динамическим - person Raghunandan; 27.01.2014
comment
Указанная строка такова: MainActivity.this.cus.getFilter().filter(cs); Это моя основная деятельность, которая будет фильтровать lisview. - person user3234390; 27.01.2014
comment
@ user3234390 cus имеет значение null, где объявлено и инициализировано?. Убедитесь, что вы объявили перед onCreate и инициализировали в onCrate - person Raghunandan; 27.01.2014
comment
Я опубликую всю свою основную деятельность. пожалуйста, проверьте мой обновленный вопрос - person user3234390; 27.01.2014
comment
@ user3234390 сделайте, как было предложено в моем предыдущем комментарии - person Raghunandan; 27.01.2014
comment
я инициализировал его так: CustomAdapter cus = new CustomAdapter(MainActivity.this,elename,nos); но он не работает - person user3234390; 27.01.2014
comment
@user3234390 user3234390 выделите его вне onCreate и инициализируйте в onCreate - person Raghunandan; 27.01.2014
comment
О, я понял! но не могли бы вы помочь мне в последний раз? приложение принудительно не закрывается, но поиск работает некорректно! я печатаю что-то, и это показывает неправильные результаты! - person user3234390; 27.01.2014
comment
@ user3234390 примите этот ответ и начните новый вопрос с соответствующими деталями. слишком много комментариев, ведущих к обсуждению - person Raghunandan; 27.01.2014
comment
Да конечно. Но, пожалуйста, помогите мне с моим новым вопросом. - person user3234390; 27.01.2014
comment
пожалуйста, проверьте мой новый вопрос - stackoverflow.com/questions/21383747 / - person user3234390; 27.01.2014