【发布时间】:2015-08-26 14:28:39
【问题描述】:
我知道在 stackoverflow 上有很多关于这个问题的答案,而且我确实找到了尽可能多的答案。但是,我没有找到任何解决方案来解决我的问题。
我的问题:
我正在为一家初创公司制作考勤系统。应用程序中的第二个活动,从 sql server 获取员工数据并将其显示在列表中。我的列表项中有一个文本视图和一个按钮。按钮显示员工的状态。现在,当我单击按钮时,按钮的状态更改存在重复性。假设我为 1 个项目执行此操作,然后在滚动时它发生在列表中的另一个项目上。
我尝试了什么:
研究了自定义适配器的概念并覆盖了适配器类中的 get 视图。 在列表视图和持有人概念中研究了回收概念。
仍然无法解决。请提出一些建议。
这是适配器类的代码:
package mywork.attendance_system;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Harshul on 8/24/2015.
*/
public class custom_adapter extends ArrayAdapter<String> {
private LayoutInflater inflater;
// private int[] colors;
ArrayList<String> emp;
//ArrayList<Boolean> status;
public custom_adapter(Activity activity , ArrayList<String> items)
{
super(activity, R.layout.rowlayout, items);
inflater = activity.getWindow().getLayoutInflater();
emp=items;
// this.status=status;
Log.d("1111",emp.get(1));
// this.colors[0]=Color.parseColor("#FFFFF");
// this.colors[1]=Color.parseColor("#D2E4FC");
}
static class ViewHolder{
public TextView tview;
public Button b1;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent){
ViewHolder viewHolder = null;
if (convertView==null)
{
convertView = inflater.inflate(R.layout.rowlayout, null);
viewHolder = new ViewHolder();
viewHolder.tview=(TextView)convertView.findViewById(R.id.t1);
viewHolder.b1=(Button)convertView.findViewById(R.id.A);
convertView.setTag(viewHolder);
}
else
{
viewHolder=(ViewHolder)convertView.getTag();
}
final ViewHolder finalViewHolder = viewHolder;
viewHolder.b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout parentRow = (LinearLayout) v.getParent();
ListView listView = (ListView) parentRow.getParent();
final int position1 = listView.getPositionForView(parentRow);
if((finalViewHolder.b1.getText()).equals("A")) {
finalViewHolder.b1.setText("P");
// status.set(position1,true);
// Log.d("statussss",String.valueOf(status.get(position1)));
}
else {
finalViewHolder.b1.setText("A");
// status.set(position1,false);
// Log.d("statussss",String.valueOf(status.get(position1)));
}
}});
finalViewHolder.tview.setText(String.valueOf(emp.get(position)));
if (position%2==1)
{
finalViewHolder.tview.setBackgroundColor(Color.parseColor("#F0F0F0"));
}
else
{
finalViewHolder.tview.setBackgroundColor(Color.parseColor("#D2E4FC"));
}
return convertView;
}
}
我的列表项布局的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<TextView
android:id="@+id/t1"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:textSize="20sp"
android:padding="20dp"
android:textColor="#222222"
android:textStyle="bold"
/>
<Button
android:layout_width="60dp"
android:layout_height="60dp"
android:id="@+id/A"
android:text="A"
android:textSize="20dp"
/>
</LinearLayout>
如果你还需要什么就说吧,我会上传的。
【问题讨论】:
-
ArrayList
emp;应该是 ArrayList emp;并且 Employe 有 name 和 isActive 字段,使用 isActive 作为按钮。你能不能试试。 -
@sedpol - 你可以给我一些例子或任何代码参考。我没明白。
-
@harshuljain 你有一个谷歌的例子。这是找到它的最佳地点。
-
@harshuljain 当我用谷歌搜索“带有按钮的 android 列表示例”时,我发现了这个 -> looksok.wordpress.com/tag/listview-item-with-button 这对你来说是一个很好的参考。
标签: android android-layout android-listview