我正在尝试找出以下列出的问题的解决方案。我使用Listview
生成Simpleadapter
。当我点击列表视图中的一行时,我想制作一个标识为colorful
的布局。我能做到这一点。但我的问题从这里开始。当我点击另一行时说第5行时,可以看到彩色布局,但是对于之前单击的行也可以看到布局。我想要做的是使布局的颜色仅对于单击的行可见(即,它应该一次只能看到一行,即当前被点击的行并且对于所有剩余的行都是隐藏的),并且布局应该对于以前点击过的行。我尝试使用viewholder
,但它没有帮助。我的代码片段如下。我一步一步地指导我,因为我是Android新手。
final BaseAdapter k=new SimpleAdapter(getActivity(),val,R.layout.mytaskdata,new String[]{"sname","heading","desc","id","path","receiver","sender"},new int[]{R.id.textView1,R.id.textView2,R.id.textView3,R.id.hide1,R.id.hide2,R.id.hide3,R.id.hide4})
{
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final View v = super.getView(position, convertView, parent);
TextView myname=(TextView)v.findViewById(R.id.textView1);
TextView mydes=(TextView)v.findViewById(R.id.textView2);
TextView mytopic=(TextView)v.findViewById(R.id.textView3);
ImageView edit=(ImageView)v.findViewById(R.id.ImageView03);
sent.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
RelativeLayout r=(RelativeLayout)arg1.findViewById(R.id.colorful);
// r.setVisibility(arg1.VISIBLE);
int temp=sent.getCheckedItemPosition();
Log.i("itemposition",""+temp);
Toast.makeText(getActivity(),"pos"+arg2+"hii"+positionThatSaysHi,1000).show();
if(arg2!=positionThatSaysHi)
{
r.setVisibility(arg1.VISIBLE);
positionThatSaysHi = arg2;
notifyDataSetChanged();
}
else
{
r.setVisibility(arg1.GONE);
notifyDataSetChanged();
}
});
答案 0 :(得分:0)
我建议修改OnClickListener
以仅记录所选行,然后调用notifyDataSetChanged()
。这将导致ListView通过调用适配器重绘其项目。因此,您只需要在getView()
中检查此值,以确定&#34;多彩&#34;视图应该是可见的。
因此更新的代码类似于:
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
final View v = super.getView(position, convertView, parent);
TextView myname=(TextView)v.findViewById(R.id.textView1);
TextView mydes=(TextView)v.findViewById(R.id.textView2);
TextView mytopic=(TextView)v.findViewById(R.id.textView3);
ImageView edit=(ImageView)v.findViewById(R.id.ImageView03);
RelativeLayout r = (RelativeLayout)v.findViewById(R.id.colorful)
r.setVisibility(position == positionThatSaysHi ? View.VISIBLE : View.GONE);
sent.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
positionThatSaysHi = arg2;
notifyDataSetChanged();
}
});
}
这样,您可以确保只突出显示一个视图(同时也简化了代码)。
答案 1 :(得分:0)
利用ListView中的选择模式(请参阅setChoiceMode()),并将其设置为CHOICE_MODE_SINGLE。
使用选择状态切换彩色布局的可见性。如果可能的话,最简单的方法是使选择器中的彩色位可绘制,其中selected = true。这样它将自动显示,您不必担心隐藏和显示视图。