2014-03-31 26 views
6

我创建了一个ListView,其子组件由一个EditText组成。但是,当我点击EditText,给它聚焦,然后notifyDataSetChanged(),更新ListView,然后再次点击任何EditTexts,为列表中的每个EditText绘制一个光标(Nexus 5,仿真器等)。在ListView中显示EditText时如何隐藏多个游标?

在Nexus 5上Nexus 5

以下是我的xml列表和列表项目。

activity_main.xml中

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/lv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.zlistfocus.MainActivity" 
    tools:ignore="MergeRootFrame" /> 

listview_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tv" 
    android:layout_width="match_parent" 
    android:layout_height="40dp" 
    android:paddingBottom="4dp" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp" 
    android:paddingTop="4dp" /> 

因为我想的EditText能够获得焦点,我跟着一些技巧和指针的位置:https://stackoverflow.com/a/4901683/499125。具体而言,我将android:windowSoftInputMode="adjustNothing"添加到了AndroidManifest.xml中的Activity标签,以便列表项可以获得焦点,创建此问题。然后,我尝试将OnItemSelectedListener附加到列表视图中,作为选定的答案建议。但是,这些幽灵游标仍然存在。

@AnswerBot:我正在使用一个ArrayAdapter,它包含一个整数列表。

public class MainActivity extends ActionBarActivity { 

    private ListView lv; 
    private ArrayAdapter<Integer> adapter; 
    private List<Integer> data = new ArrayList<Integer>(); 

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

     lv = (ListView) findViewById(R.id.lv); 
     adapter = new ArrayAdapter<Integer>(this, R.layout.listview_item, R.id.tv, data); 
     lv.setAdapter(adapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add(0, 1, 0, "Refresh"); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == 1) { 
      getSomeData(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    private void getSomeData() { 
     if (data.isEmpty()) { 
      for (int i = 0; i < 20; i++) { 
       data.add(i); 
      } 
     } else { 
      int start = data.get(data.size() - 1) + 1; 
      for (int i = 0; i < 20; i++) { 
       data.set(i, start + i); 
      } 
     } 
     adapter.notifyDataSetChanged(); 
    } 
} 
+0

如果您已经使用自定义适配器,请张贴 – AnswerBot

+0

我已经更清楚地更新了我的问题。 –

回答

3

您可以通过在EditText(s)上调用setCursorVisible(false)来隐藏EditText的光标。

编辑: 为此,您可能会想使用自定义适配器(BaseAdapter),并在getView方法做这样的事情:

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

    ... 

    editText.setCursorVisible(editText.hasFocus()); 

    return convertView; 
} 
+0

该解决方案解决了多光标问题。但是现在,我根本看不到选择器。有没有办法显示选择器? –