Android ListView上的布局权重会导致choiceMode停止工作

Android ListView上的布局权重会导致choiceMode停止工作,android,listview,Android,Listview,为了简洁起见,我可以将这段代码放在一起演示这个问题。问题在于ListView,如果我将两个ListView上的layout_weight设置为1,则页面布局正确,但choiceMode=singleChoice显示不正确,即所选项目不会保持高亮显示。如果layout_weight设置为0或省略,则singleChoice高亮显示工作正常,但屏幕元素在顶部卡住 我看不出这两个应该相互影响的逻辑原因。。。我倾向于称之为bug,但对我来说更重要的是如何解决它 主布局XML: 单击侦听器: publi

为了简洁起见,我可以将这段代码放在一起演示这个问题。问题在于ListView,如果我将两个ListView上的layout_weight设置为1,则页面布局正确,但choiceMode=singleChoice显示不正确,即所选项目不会保持高亮显示。如果layout_weight设置为0或省略,则singleChoice高亮显示工作正常,但屏幕元素在顶部卡住

我看不出这两个应该相互影响的逻辑原因。。。我倾向于称之为bug,但对我来说更重要的是如何解决它

主布局XML:

单击侦听器:

public class MyListener implements AdapterView.OnItemClickListener {

  MyActivity activity;

  public MyListener(MyActivity myActivity) {
    activity = myActivity;
  }

  @Override
  public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    ListView listView = (ListView)activity.findViewById(R.id.second_list);
    MyData data = new MyData(activity);
    Cursor cursor = data.getCursor();

    String[] columns = new String[] {"name"};
    int[] fields = new int[] {R.id.item_text};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
      activity,
      R.layout.item,
      cursor,
      columns,
      fields,
      0
    );
    listView.setAdapter(adapter);
  }
}

您的listSelector是一种静态颜色,而不是支持选定和/或激活的状态列表,具体取决于您支持的版本。

文档说明listSelector的一个选项是颜色值,格式为rgb、argb、rrggbb,或者aarrggbb:我不确定什么样的可绘制对象是合适的,我也没有找到任何例子。
public class MyActivity extends Activity {

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

  @Override
  protected void onPause() {
    super.onPause();
  }

  @Override
  protected void onResume() {
    super.onResume();
    MyData data = new MyData(this);
    Cursor cursor = data.getCursor();

    String[] columns = new String[] {"name"};
    int[] fields = new int[] {R.id.item_text};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
      this,
      R.layout.item,
      cursor,
      columns,
      fields,
      0
    );

    ListView lv = (ListView)findViewById(R.id.test_list);
    lv.clearChoices();
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new MyListener(this));
  }

  public void openNewActivity(View v) {
    //
  }

}
public class MyListener implements AdapterView.OnItemClickListener {

  MyActivity activity;

  public MyListener(MyActivity myActivity) {
    activity = myActivity;
  }

  @Override
  public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    ListView listView = (ListView)activity.findViewById(R.id.second_list);
    MyData data = new MyData(activity);
    Cursor cursor = data.getCursor();

    String[] columns = new String[] {"name"};
    int[] fields = new int[] {R.id.item_text};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
      activity,
      R.layout.item,
      cursor,
      columns,
      fields,
      0
    );
    listView.setAdapter(adapter);
  }
}