- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
请看这个屏幕:
当我点击接受更改为另一个按钮时:
如果我在可扩展 ListView 中单击一个 getChildView
列表项,它也会在滚动屏幕时影响其他子项。在这里,我在单击 getChildview
项时更改了按钮文本
这里我点击了一个 child 的接受按钮,然后它应该变成另一个按钮但是当滚动所有子项目按钮时也会改变
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private final Context context;
private final List<String> headings;
private List<DriverOrders> order;
GroupHolder holder;
public ExpandableListAdapter(final FragmentActivity fragmentActivity,
final List<String> lidtDataHeaders, final List<DriverOrders> orders
) {
this.context = fragmentActivity;
this.headings = lidtDataHeaders;
this.order = orders;
}
@Override
public Object getChild(final int groupPosition, final int childPosition) {
return this.headings.get(childPosition);
}
@Override
public long getChildId(final int groupPosition, final int childPosition) {
return childPosition;
}
@Override
public View getChildView(final int groupPosition,
final int childPosition, final boolean isLastChild,
View convertView, final ViewGroup parent) {
final String childName = (String) getChild(groupPosition, childPosition);
// GroupHolder holder;
holder = null;
if (convertView == null) {
final LayoutInflater inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.driver_child_layout, null);
holder = new GroupHolder();
holder.orderNumber = (TextView) convertView.findViewById(R.id.orderNumber);
holder.taskType = (TextView) convertView.findViewById(R.id.taskType);
holder.detaisl = (TextView) convertView.findViewById(R.id.detaisl);
holder.accept = (Button) convertView.findViewById(R.id.accpet);
holder.decline = (Button) convertView.findViewById(R.id.decline);
holder.started = (Button) convertView.findViewById(R.id.started);
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
/* TextView orderNumber = (TextView) convertView.findViewById(R.id.orderNumber);
TextView taskType = (TextView) convertView.findViewById(R.id.taskType);
TextView detaisl = (TextView) convertView.findViewById(R.id.detaisl);
accept = (Button) convertView.findViewById(R.id.button);
decline = (Button) convertView.findViewById(R.id.decline);
started = (Button) convertView.findViewById(R.id.started);*/
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("","inside convertview click"+parent.getChildAt(childPosition));
}
});
holder.started.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(null, CommonUtility.SERVER_URI + "person-started/" + Long.parseLong(order.get(groupPosition).getOrderId().trim()), new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
try {
if (response.getString("STATUS").equalsIgnoreCase("true")) {
mListener.onStarttrip(order.get(groupPosition).getOrderId(), order.get(groupPosition).getCustomerName(), order.get(groupPosition).getCustomerContact());
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
if (statusCode == 404) {
Toast.makeText(getActivity(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(getActivity(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(getActivity(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
} else {
Toast.makeText(getActivity(), "Before started you have to accept the order", Toast.LENGTH_LONG).show();
}
}
});
holder.orderNumber.setText(order.get(groupPosition).getCustomerName());
holder.taskType.setText(order.get(groupPosition).getCustomerContact());
holder.detaisl.setText(order.get(groupPosition).getOrderId());
holder.accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("", "group positioins" + groupPosition);
String associateId = sessionManager.getUserDetails().get("associate_id");
String oredeerid = order.get(groupPosition).getOrderId();
RequestParams params = new RequestParams();
params.put("oid", oredeerid);
params.put("did", associateId);
requestForAcceptOrder(params, groupPosition);
}
});
holder.decline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.decline.setFocusable(false);
holder.decline.setEnabled(false);
holder.decline.setClickable(false);
sessionManager.setDclineId(order.get(groupPosition).getOrderId());
Toast.makeText(getActivity(), "Order is declined", Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(getActivity(), DeclineReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
Long timeInMillis = new GregorianCalendar().getTimeInMillis() + 1000;
Log.d("pass", "!!!!!!!");
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, timeInMillis, 5400000, pendingIntent);
notifyDataSetChanged();
}
});
return convertView;
}
@Override
public int getChildrenCount(final int groupPosition) {
return 1;
}
@Override
public Object getGroup(final int groupPosition) {
return this.headings.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.headings.size();
}
@Override
public long getGroupId(final int groupPosition) {
return groupPosition;
}
@SuppressLint("NewApi")
@Override
public View getGroupView(final int groupPosition,
final boolean isExpanded, View convertView,
final ViewGroup parent) {
final String headerTitle = (String) this.getGroup(groupPosition);
/* final ExpandableListView mExpandableListView = (ExpandableListView) parent;
mExpandableListView.expandGroup(0);*/
// to display indicator of Expandable view from left to right
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
CabOrderFragment.this.expnListView
.setIndicatorBounds(
CabOrderFragment.this.expnListView
.getWidth() - 50,
CabOrderFragment.this.expnListView
.getWidth());
} else {
CabOrderFragment.this.expnListView
.setIndicatorBoundsRelative(
CabOrderFragment.this.expnListView
.getWidth() - 50,
CabOrderFragment.this.expnListView
.getWidth());
}
final LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(
R.layout.expandlistview_heading_group, null);
// final ImageView image = (ImageView) convertView
// .findViewById(R.id.ivHeadeImage);
final TextView lblListHeader = (TextView) convertView
.findViewById(R.id.tvListHeader);
// image.setImageResource(this.images[groupPosition]);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle.toUpperCase(Locale.getDefault()));
lblListHeader.setTextSize(10);
return convertView;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isChildSelectable(final int groupPosition,
final int childPosition) {
// TODO Auto-generated method stub
return true;
}
private void requestForAcceptOrder(RequestParams params, final int groupPosition) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(null, CommonUtility.SERVER_URI + "accept", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject obj) {
try {
if (obj.getInt("code") == 0) {
holder.accept.setVisibility(View.GONE);
holder.decline.setVisibility(View.INVISIBLE);
holder.started.setVisibility(View.VISIBLE);
Toast.makeText(getActivity(), "Oeder is Placed", Toast.LENGTH_LONG);
Intent myIntent = new Intent(getActivity(), DriverOrdersReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
Log.d("stop alarm", "!!!!!!!");
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
flag = true;
Log.e("", "object data" + obj.toString());
} else {
Toast.makeText(getActivity(), "Oeder is Not Placed", Toast.LENGTH_LONG);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
if (statusCode == 404) {
Toast.makeText(getActivity(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(getActivity(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(getActivity(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
/*private view holder class*/
private class GroupHolder {
TextView orderNumber;
TextView taskType;
TextView detaisl;
Button accept;
Button decline;
Button started;
}
}
最佳答案
您的问题是由于 Recycling mechanism 引起的,您需要在 getChildView()
方法中重置文本颜色。
这可以通过 if{}else{}
案例来完成。
例如:
if(yourTextMustTakeTheDefaultColor){
// set the default color in your text
} else {
// set the other color
}
更新:
1)首先不要使用holder作为类变量。
从您的适配器中删除类变量 GroupHolder holder;
。
然后像这样更改您的 getChildView()
代码:
GroupHolder holder;
if (convertView == null) {
final LayoutInflater inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.driver_child_layout, null);
holder = new GroupHolder();
//the rest of code...
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
//the rest of code...
2) 就像我已经告诉你的那样:在 getChildView()
中添加 if else
案例来更新你的 View (我想你想更新 accept/下降/开始可见性)取决于子数据。
例如:
if(order.get(groupPosition).isAcceptedVisible()){
holder.accept.setVisibility(View.VISIBLE);
} else {
holder.accept.setVisibility(View.GONE);
}
3) 更改您的 requestForAcceptOrder()
以传递子位置。
private void requestForAcceptOrder(RequestParams params, final int groupPosition, final int childPosition)
4) 在 onSuccess()
方法中,您有 groupPosition
和 childPosition
,更新您的列表的数据/模型并调用 notifyDataSetChanged ();
,系统将负责更新您的 View 。
关于java - getChild 查看项目 onClickListener 正在影响 ExpandableListView Android 中的所有子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33603030/
我正在开发几个不同的 Joomla 附加组件,但希望将它们保留为单独的 git 存储库,因为它们有不同的开发团队(甚至组织)。但是,我也想将它们作为共享相同 Joomla 基础(被 .gitignor
最近,由于行销人员的要求,我已将Optimobile SDK添加到我正在工作的项目中。 在将其添加并在设备上安装新的apk之后。我注意到,我的应用程序中添加了两个新权限,即无需用户交互即可发送SMS的
我遇到了gradle plugin帮助我处理带点的属性名称。像这样使用时,它在单个项目中工作正常: apply plugin: 'config' buildscript { repositor
我很难设置一组相互依赖的相关 Maven 项目。 这是我的简化案例: pom.xml -- parent pom \base\ pom.xml src\main\java\Ba
我正在研究 Apache Ant 项目的发展,以使用 Gradle 对其进行编译,并且我有不同的子项目集。 我的目标是将主项目的输出用作某些子项目的依赖项。全局配置如下: MainProject:
对于每个用户帐户,我尝试计算他们今天有多少个事件。 我的数据结构如下: accounts - { "-KaxcGWx1-a8s7dhsjhsd" : { "name" : "Bill", "ev
我有两个项目: workspace Project1 |--build.gradle |--settings.gradle |--Subproject1 | |--build.
我们有一个 Maven 多模块项目,我们希望逐步迁移到一个 gradle 项目。 对于初学者,我只想将几个子项目迁移到 gradle,但将它们作为子项目保留到父 maven-project 构建。 有
我的 gradle 项目结构如下所示: geode-core geode-lucene extensions/geode-modules extensions/geode-modules-sessio
我有一个基于 CMake 的项目,具有以下“设计”: add_subdirectory(first_lib) add_subdirectory(second_lib) add_subdirectory
我创建了一个表单,其中有 2 个部分,一个是标题(父级),另一个是子级。在标题部分,我创建了一个字段,如项目(下拉),如 netsuite、SFDC 等,在子部分,我创建了另一个字段,如子项目。当我根
我正在创建一个新的应用程序 MyApp,我决定将应用程序的某些部分放在一个单独的框架 MyFramework 中,而不是应用程序本身,以使其可重用在其他项目中。该框架有自己的项目 (MyFramewo
想象一个包含多个组件的整体项目: 基本 我 网络 app-a app-b app-c 现在,假设 web 依赖于依赖于 basic 的 io,所有这些东西都在一个 repo 中,并且有一个 CMake
我有一个 SBT 项目,特别是 Play Framework 2.1 项目,它在配置中指定了许多子项目。编译时依赖项似乎工作正常,但“清理”似乎只清理当前选定的项目,不包括其依赖项。有什么方法可以清理
我有一个工作的多模块 Play 2.2 应用程序,它的组织方式是这样的...... myApp + app + conf + project + build.propertie
我无法理解模块和子项目之间的区别。有什么区别,哪个应该用于模块应用程序。 最佳答案 使用这两种方法,您都可以单独编译、运行和测试代码。 使用子项目,您可以共享设置,并且它通过源代码连接到依赖它的项目:
我有一个使用 Scala 2.10 的项目和一个使用 Scala 2.11 的项目。它们依赖于一个可以同时编译的通用项目。 lazy val foo = (project in file("foo")
如何让 gradle 克隆一个 git 存储库(到当前存储库的子存储库)并将其构建为子项目? 目前我有以下内容: settings.gradle: include 'contrib/dependenc
我在我的 gradle 项目中添加了一个子项目,现在每当我执行目标 check ,它还在我的子项目上运行测试。 我希望我可以运行 check - 主项目上的任务,将其指定为绝对任务 gradle :c
假设您有 2 个 gradle 项目。第一个是一个包含 2 个 java 子项目的多项目: rootProject :my:subProject1 :myother:subProjec
我是一名优秀的程序员,十分优秀!