2012-05-11 44 views
0

これは、アイテムが選択されるたびに発生しました。私は、OnItemClickListenerを持つListViewを持っていて、イベントがトリガされると、選択された項目が選択されていない状態になった後、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: "選択を1" になります。

<?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からライン "layout_weight =アンドロイド" を削除した場合正常に動作しますが、私は実際のレイアウトでそのコードを必要としていますが、それは単なる例に過ぎません。

答えて

0

テキストを変更すると、ビューはコンテンツの変更のためにリレイアウトされ、特にエレメントの位置を変更する必要があります。これが焦点がリセットされる理由です。これが根本的な原因です...

TextViewをフォーカスできないようにするか、リストビュー項目のフォーカスを保存して復元することを検討してください。

+0

私は両方のことをしましたが、うまくいきませんでした。 – Nexs

+0

イベントハンドラでフォーカスを復元したと仮定します。これは、イベントハンドラの後にリレーアウトが実行されると機能しないためです。申し訳ありませんが、私はそれを正確に解決する方法がわかりませんが、私は問題の原因を理解しています。 –

関連する問題