これは、アイテムが選択されるたびに発生しました。私は、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 =アンドロイド" を削除した場合正常に動作しますが、私は実際のレイアウトでそのコードを必要としていますが、それは単なる例に過ぎません。
私は両方のことをしましたが、うまくいきませんでした。 – Nexs
イベントハンドラでフォーカスを復元したと仮定します。これは、イベントハンドラの後にリレーアウトが実行されると機能しないためです。申し訳ありませんが、私はそれを正確に解決する方法がわかりませんが、私は問題の原因を理解しています。 –