我正在制作一个有三个选项卡的应用程序(类似于WhatsApp布局)。三个选项卡是朋友、家人和联系人。每个选项卡中都有一个列表。每个列表项还具有以下视图:名称位于左侧,名称下面的描述和一个按钮,该按钮具有背景,位于名称的同一行。(我以前发布过这个,但现在重新发布了这个,因为我已经能够找出主要的错误并减少我需要放在这里的代码)
每个listview项包含一个类(朋友、家庭、联系人)。这三个类都有一个标志(canViewYouOnlineFlag)。如果此标志设置为true,则相应的联系人、家人或朋友将知道您在线,反之亦然。如果将标志设置为true,则按钮的颜色必须为蓝色;如果将标志设置为false,则按钮的颜色必须为黑色。
listview中的3个项(每个项都有一个对象和这三个项的CanViewYouOnlineflags)如下:listview item 1:true、listview item 2:false、listview item 3:false。
呈现时,列表视图项的按钮颜色必须为蓝色、黑色、黑色。然而,原来全是黑色的。
类似地,如果listview item 3的对象标志设置为“true”,那么所有按钮都是蓝色的。基本上,按钮的颜色是由上一个Listview项中的对象决定的。listview项中包含的对象的实际标志不是问题所在,我也验证了这一点(即object标志为true,但button仍然呈现黑色,因为最后一个listview项的按钮为黑色)。请帮我解决这个问题。以下是main_lp_view_item布局的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:id="@+id/main_lp_text"
android:textSize="18sp"
android:textColor="@color/colorPrimaryDark"
android:focusable="false" />
<TextView
android:id="@+id/main_lp_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/main_lp_text"
android:textSize="13sp"
android:focusable="false" />
<Button
android:id="@+id/can_view_you_online"
android:layout_width="33sp"
android:layout_height="29sp"
android:layout_above="@+id/main_lp_subtitle"
android:layout_marginTop="10dp"
android:textStyle="bold"
android:background="@drawable/lp_list_button"
android:layout_alignParentEnd="true"
android:focusable="false"
/>
</RelativeLayout>
public class LPListItemAdapter<T> extends BaseAdapter{ //Class for rendering each ListItem
Context context;
List<T> rowItems;
public LPListItemAdapter(Context context, List<T> rowItems)
{
this.context=context;
this.rowItems=rowItems;
}
@Override
public int getCount()
{
return rowItems.size();
}
@Override
public Object getItem(int position)
{
return rowItems.get(position);
}
@Override
public long getItemId(int position)
{
return rowItems.indexOf(getItem(position));
}
private class ViewHolder{
TextView main_text; //Display Name
TextView subtitle; //Display Description
Button can_view_you_online; //Button to set and display status of CanViewYouOnline flag of the class
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder=null;
LayoutInflater mInflater= (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
holder = new ViewHolder();
if(convertView==null)
{
convertView=mInflater.inflate(R.layout.main_lp_view_item, null);
holder.main_text= (TextView) convertView.findViewById(R.id.main_lp_text);
holder.subtitle= (TextView) convertView.findViewById(R.id.main_lp_subtitle);
holder.canViewYouOnline= (Button) convertView.findViewById(R.id.can_view_you_online);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
final T rowItem= rowItems.get(position);
String main_text;
String subtitle;
if(rowItem instanceof Friends) //If Row Item is a Friend class
{
main_text= ((Friends) rowItem).getName();
subtitle= ((Friends) rowItem).getDescription();
}
else if(rowItem instanceof Family) //If Row Item is a Family class
{
main_text= ((Family) rowItem).getName();
subtitle= ((Family) rowItem).getDescription();
}
else if(rowItem instanceof Contact) //If Row Item is a Contact class
{
main_text=((Contact) rowItem).getName();
subtitle=((Contact) rowItem).getDescription();
}
else
{
main_text="NA";
subtitle="";
}
holder.main_text.setText(main_text);
holder.subtitle.setText(subtitle);
if(getflagstatus(rowItem)) //If rowItem's canViewYouOnline flag is set true, then let color of button be default (i.e. blue)
holder.canViewYouOnline.getBackground().clearColorFilter();
else //Else (if it false), make it black
holder.canViewYouOnline.getBackground().setColorFilter(Color.argb(255, 0, 0, 0), PorterDuff.Mode.SRC_ATOP);
//This part of the function is the problem because the color filter of the drawable of the button in the current list item gets overriden when
//this same code is executed for the next listview item.
holder.canViewYouOnline.setOnClickListener(new View.OnClickListener() {
boolean buttonClickFlag;
@Override
public void onClick(View v) { //The Onclick function allows one to click the button on the list item and set/reset the canViewYouOnline flag. It is working fine.
buttonClickFlag=getflagstatus(rowItem); //get buttonClickFlag from canViewYouOnline flag status
if(buttonClickFlag==false) //If buttonClickFlag is false
{
v.getBackground().clearColorFilter(); //set color of button drawable to default (which is blue)
buttonClickFlag=true; //set buttonClickflag to true
}
else //if buttonClickFlag is true
{
v.getBackground().setColorFilter(Color.argb(255,0,0,0), PorterDuff.Mode.SRC_ATOP); //set color of button drawable to black
buttonClickFlag=false; //set buttonClickflag to false
}
//update the canViewYouOnline flag in the rowItem by calling the onlineStatusUpdateButtonOnClickActivity function.
//Function is working perfectly so is not included in the stack overflow entry due to space constraints
onlineStatusUpdateButtonOnClickActivity(rowItem, buttonClickFlag,v);
}
});
return convertView;
}
public boolean getflagstatus(T rowItem)
{
//Function to get the CanViewYouOnlineFlag() from the underlying class in the rowItem
boolean flagStatus=false;
if(rowItem instanceof Friends)
flagStatus=((Friends) rowItem).getCanViewYouOnlineFlag();
else if(rowItem instanceof Family)
flagStatus=((Family) rowItem).getCanViewYouOnlineFlag();
else if(rowItem instanceof Contact)
flagStatus= ((Contact) rowItem).getCanViewYouOnlineFlag();
return flagStatus;
}
public void onlineStatusUpdateButtonOnClickActivity(T rowItem, boolean mLBflag, View convertView) {//WORKS FINE SO NOT PUTTING IT HERE DUE TO SPACE CONSTRAINT}
}
我得到答案了。如果您使用单个可提取的资源,并且仅在标记更改时更改颜色,就会出现此错误。相反,使用两个drawable,当CanViewYouOnline为true时,将button的背景设置为drawable1,当CanViewYouOnline为false,将button的背景设置为drawable2。
问题内容: 让我们从一个简单的测试用例开始: 任何人都在乎猜测什么将作为输出打印(在底部显示,以免立即破坏惊喜)。 问题是: 为什么原始和包装的整数表现不同? 为什么反射访问与直接访问返回不同的结果? 最困扰我的人-为什么String表现得像原始的而不是像? 结果(java 1.5): 问题答案: 内联编译时常量(在javac编译时)。参见JLS,尤其是15.28定义了常量表达式,而13.4.9讨
问题内容: 我正在尝试使用for循环修改列表中的项目,但出现错误(请参见下文)。样例代码: 错误: 有什么办法解决这个问题? 问题答案: 尝试以下方法: 您遇到的基本问题是,当你写的,有是一个列表,则需要是一个整数,数字索引列表。但是在循环中 是列表中的实际事物,即字符串,而不是事物的数字索引。是一个迭代器,它生成数字而不是列表中的值,因此您可以使用它。 一个替代方案是 该函数为您提供了一个在表单
“我的列表视图”项包含一个“删除”按钮,我在适配器中将其设置为从数据库中删除该项。完成后,如何刷新包含listView的片段以删除该项?相关代码如下: 删除适配器中的项功能: listview在我的片段中是这样设置的: 谢谢 更新: 现在我已经将子项目上的OnClickListener从适配器传递到片段ListView OnItemClickListener,如下所示: 更新适配器 更新片段 但现
问题内容: 我刚刚开始使用Java中的列表。我想知道推荐的修改列表中每个元素的方法是什么? 我已经可以通过以下两种方法来完成此任务,但是它们看起来都相当简单。有没有更好的方法可以在Java中完成此操作?是否推荐以下任何一种方法,或者两者都处于同一水平? 问题答案: 第二个版本会更好。在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModification
本文向大家介绍Android中实现长按修改ListView对象的内容,包括了Android中实现长按修改ListView对象的内容的使用技巧和注意事项,需要的朋友参考一下 实现的效果如下: 我在ListView的Item长按事件内打开一个弹出窗口,窗口内有一个EditText对象,在这个编辑框内输入文本点确定后,直接修改掉ListView对象内某个TextView对象的内容。 示例代码如下: 总结
问题内容: 我有一个列表列表,看起来像: 有大约30,000个内部清单。我想做的是根据每个内部列表的第4个项目消除重复项。因此,上面的列表列表如下所示: 这是我到目前为止的内容: 我认为这应该可行,但它会不断运行。我让它运行30分钟,然后将其杀死。我认为程序不需要花那么长时间,所以我猜我的逻辑有问题。 我觉得创建一个全新的列表列表非常愚蠢。任何帮助将不胜感激,请随时随地学习。如果不正确,请更正我的