0

enter image description here禁用项目在一个AdapterView

基本上我想要的适配器,当我取消的第一个项目中,第二项是“灰色”和无法点击,或禁用。

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 


     if(position == 0) { 
      //disable.enable push 
      CheckBox checkBox = (CheckBox) mRoot.findViewById(R.id.cbRowCheckBox); 
      checkBox.setChecked(!checkBox.isChecked()); 

      mPushEnabled = checkBox.isChecked(); 

      if (mPushEnabled) { 
       //code for push enabled 
       //code to let position 1 enabled, i was thinking something along th e lines, 
       adapter.getposition(1).setEnabled(true); 
      } else { 
       //code for push disabled 
       adapter.getposition(1).setEnabled(false); 
      } 
     } else if(position == 1) { 
      //push notification settings 
      //open intent 
     } 
    } 

我在想,我能得到的,其中产品的位置,只是将其设置为false,以setEnabled()。这是正确的方式吗?如果是这样,我不知道如何定位该项目。如果现在,最好的方法是什么?

+0

您应该使用PreferenceActivity和android:dependency属性。非本地偏好一个非常非常非常非常糟糕的主意 –

+0

我只想知道如何禁用位置0时按下列表位置1 .....我拥有所有其他逻辑在那里。我把它拿出来,所以这将是一个非常长的帖子 – DDukesterman

+0

这正是PreferenceActivity和依赖关系的目的..我只是想确保你不能使用它们,而我仍然不确定 –

回答

0

getposition究竟做了什么?

我认为你不能直接从适配器获取视图,因为它们经常被listView重用。

我认为最好的方法是跟踪您想要启用的项目位置,并相应地从您的适配器中的getView()或bindView()方法更新视图。

0

基本上我想要的是,当我取消选中第一项上的方框时,第二项 项是“变灰”并且不可点击或禁用。

当您检查CheckBox店适配器级别的下一行的position,就是那个将被禁用,并呼吁notifyDataSetChanged()

在适配器中,如果位置参数匹配先前存储的禁用行位置(对于任何其他位置为true),则首先覆盖isEnabled()方法并使其返回false。这将使该行不可点击。

然后在getView()方法中检查当前位置是否为禁用行的位置并使其看起来褪色或您想要的其他方式。

+0

notifydatasetchanged()使它到达复选框的位置总是检查...当我点击,它永远不会改变 – DDukesterman

+0

@DDukesterman我不知道你在做什么,特别是当你在mRoot视图(?!?)而不是视图参数中寻找该CheckBox。我已经做了一个基本的示例,你可以在这里找到https://github.com/luksprog/DroidPlayground/blob/master/src/com/luksprog/playground/adapter/PreferenceLikeAdapter.java。对于更复杂的场景,您应该使用基于偏好的活动。 – Luksprog