5

Я определил следующий код, чтобы иметь возможность устанавливать текст в определенной позиции.ListView setText в определенном положении

if(position == 0) { 
       holder.text.setText("blah"); 
      } 

То, что я хотел бы, чтобы проверить, если позиция равна 0, а затем, если он есть, установить текст в позиции р - каждый раз, когда это р = позиция + 1 (следующая позиция). Можем ли мы установить текст в текстовое изображение из держателя, но в определенном положении.

Спасибо.

+0

Под '' 'position''' вы ссылаетесь на позицию вида внутри вида списка? – danypata

+0

@ danypata Да ... Позиция адаптера – dinomuharemagic

+0

getPosition() и getItem() предназначены только для этого. Да, вы можете так, что вам нужно делать недействительными каждый раз, если вы заменяете какой-либо элемент. – RATHI

ответ

3

Во-первых, вам необходимо реализовать свой собственный RecyclerView.Adapter, внутри адаптера вам необходимо реализовать метод onBindViewHolder(), где вы можете указать текст в соответствии с позицией.

Когда позиция равна 0, вы получаете текст и сохраняете его в поле String, а когда позиция равна 1, вы соответствующим образом устанавливаете текст этого TextView.

public class CustomAdapter extends RecyclerView.Adapter { 

private String tempText; 

... 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    if(position == 0) { 
     tempText = "bla"; 
    }else if (position == 1){ 

     holder.text.setText(tempText); 
    } 
} 

}

+0

Я могу установить текст в соответствии с положением в моем адаптере listview, я спрашиваю, как я могу установить текст на следующей позиции, например: 'if (position == 0) { holder.text.setText (" blah «); позиция 1 держатель установленный текст } ' – dinomuharemagic

+0

Можете ли вы дать мне конкретное требование, чтобы я мог решить, что нам нужно делать. Если вы хотите установить текст в position1, почему бы нам просто не использовать if (position == 1)? –

+0

Я не могу установить текст в позиции 1, находясь в if (position == 0). Я не могу вызывать if (position == 1), потому что я в позиции 0. – dinomuharemagic

6

Я думаю, что вы все еще используете ListView, если не пожалуйста, обновите Название Вопроса.

В вашем методе getView(int position, View convertView, ViewGroup parent) проверьте позицию, для которой создается ваш вид. Поскольку вы уже используете владельца, я предполагаю, что вы сделали (convertView! = Null) проверку перед извлечением владельца.

Здесь в GetView (INT положения, Вид convertView, ViewGroup родитель), вы можете проверить

if (position == 0) { 
    holder.text.setText("blah"); 
} else { 
    holder.text.setText(""); 
} 

Помните еще часть требуется, поскольку мнения, как правило, чтобы повторно использовать и так более ранний «ли» должны сбрасываться или будет отображаться в других представлениях при прокрутке вашего представления.

Для подробного объяснения того, как работает повторное использование представлений, вы можете проверить это great talk, в котором Romain Guy объясняет все о ListView.

0

В вашем CustomAdapter.class добавить этот код

public View getView(final int position, View convertView, final ViewGroup parent) { 
ViewHolder holder = new ViewHolder(); 
     holder.txtDetails = (TextView) vi.findViewById(R.id.txt_expenses_details); 
     holder.txtDetails.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((ListView) parent).performItemClick(v, position, 0); 
      } 
     }); 
     vi.setTag(holder); 
     return vi; 
} 

В вашем MainActivity.class

нажмите TextView и изменить значение

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      long viewId = view.getId(); 
      if (viewId == R.id.txt_expenses_details) { 
       ((TextView)view).setText("Hey, I've just been tapped on!"); 
       customListAdapter.notifyDataSetChanged(); 
      } 
     } 
    }); 

Нажмите ListView и изменение значения (или)

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView tv = (TextView) view.findViewById(R.id.txt_expenses_details); 
      tv.setText(...); 
      customListAdapter.notifyDataSetChanged(); 
     } 
    }); 
1

Примечание! Это использование RecycleView, он аннулировал все представления за действие и имеет механизм кэширования представлений. Это может вызвать проблемы с изменением просмотров!

Лучшее решение, оно использует собственный адаптер. Или, лучшие решения, используется адаптер для этой задачи - LinkedListView. Работает так же, как RecycleView, а также поддерживает изменение взглядов в любое время.

0

Я думаю, что apporach для установки текста в определенном положении неверен. Лучшая практика использования кода заключается в изменении данных.Пусть говорим, ваша структура данных, как -

class MyData{ 
    public String status; 
} 
ArrayList<MyData> adapterList; 

Теперь, если у вас есть список MyData для адаптера и вы хотите изменить 5-й данные затем сделать так -

private void updatePostion(positionToChange = 5){ 
    for(int i = 0; i < adapterList.size(); i++) 
      adapterList.get(i).status = ""; 
    adapterList.get(positionToChange).status = "blah"; 
    notifyDataSetChanged(); 
} 

Надеется, что это поможет :)

1

Вам необходимо обновить данные своего списка. Внутри метода getView() и не беспокойтесь о позиции, потому что он будет автоматически увеличиваться.

public class ViewHolder 
    { 
     TextView text; 
    } 

public View getView(final int position, View rView, ViewGroup parent) 
    { 
     currentPosition = position; 
     rowView =rView; 


     if(rowView == null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(context); 
      rowView= inflater.inflate(R.layout.list_item_layout, null); 
      viewHolder = new ViewHolder(); 

      viewHolder.text= (TextView) rowView.findViewById(R.id.textView); 

      rowView.setTag(viewHolder); 
     } 
     else 
     { 
      viewHolder = (ViewHolder) rowView.getTag(); 
     } 
     if(position==0){ 
      viewHolder.text.setText("your Text"); 
     } 
     else if(position==1){ 
      viewHolder.text.setText("your Text 1"); 
     } 
     notifyDataSetChanged();//this will update your views 
} 
Смежные вопросы