0

Это происходило каждый раз, когда был выбран элемент. У меня есть ListView с OnItemClickListener, и когда событие запускается, он меняет текст свойства TextView на некоторую случайную строку, после чего выбранные элементы превращаются в невыбранные.Почему ListView автоматически отменяет выбор выбранных элементов?

Но если я прокомментирую строку, где текст был изменен, запустите снова приложение и снова запустите одно и то же событие, когда элемент останется выбранным.

Вот код, я уменьшил его до самого простого способа, которым я мог.

public class TestsActivity extends Activity { 
ListView optionsListView; 
TextView text; 
String[] stringArray = { "Option 1", "Option 2", "Option 3", "Option 4", 
     "Option 5", "Option 6", "Option 7", "Option 8", "Option 9", 
     "Option 10" }; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_layout);  
    optionsListView = (ListView) findViewById(R.id.list); 
    OptionsAdapter ItemsAdapter = new OptionsAdapter(this, R.id.list,stringArray); 
    optionsListView.setAdapter(ItemsAdapter); 
    text = (TextView)findViewById(R.id.textView); 
    optionsListView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, 
       long id) { 
      Toast.makeText(getApplicationContext(), "Clicked" + position, Toast.LENGTH_SHORT).show(); 
      text.setText("Something"); // <- If you comment this, it will work 
     } 
    }); 
} 

private class OptionsAdapter extends BaseAdapter { 
    String[] options; 

    public OptionsAdapter(Context context, int textViewResourceId, 
      String[] options) { 
     this.options = options; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater vi = LayoutInflater.from(getApplicationContext()); 
      convertView = vi.inflate(R.layout.list, null); 
     } 
     TextView post = (TextView) convertView.findViewById(R.id.post); 
     post.setText(options[position]); 
     return convertView; 
    } 

    public int getCount() { 
     return options.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 
} 
} 

list_layout.xml:

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

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" 
    android:text="textView" > 
</TextView> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:listSelector="#AABBCC" > 
</ListView> 

</LinearLayout> 

list.xml

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

    <TextView 
     android:id="@+id/post" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" /> 

</LinearLayout> 

Если вы удалили из list_layout.xml линий "Android: layout_weight =" 1 "" выбор будет работаю нормально, но мне нужна эта часть кода в моем реальном макете, это всего лишь пример

ответ

0

Когда вы меняете текст, вид зависит от изменения содержания, и особенно вес должен также перемещать элементы. Вот почему фокус сбрасывается. Это основная причина ...

Возможно, вам стоит подумать о том, чтобы сделать TextView непрозрачным или сохранить и восстановить фокус элемента списка.

+0

Я сделал две вещи, но это не сработало. – Nexs

+0

Я предполагаю, что вы восстановили фокус в обработчике событий, который не будет работать, потому что, если после обработчика событий выполняется ретрансляция. Извините, я не знаю, как его решить, но я понимаю причину проблемы. –

 Смежные вопросы

  • Нет связанных вопросов^_^