Java 使用@id/Android:list的Android多列表
我有一个需要点击的新列表,但这个列表不起作用。永远不会调用onListItemClick。我的应用程序中有另一个应用程序按预期工作,我不知道有什么不同。我突然想到,可能有一些冲突,因为他们都在使用提供的@id/android:list,但他们在不同的活动中,我没有发现其他人抱怨相同的问题,所以我不确定 下面是一组代码。如果有任何建议,我将不胜感激 工作:Java 使用@id/Android:list的Android多列表,java,android,onclick,Java,Android,Onclick,我有一个需要点击的新列表,但这个列表不起作用。永远不会调用onListItemClick。我的应用程序中有另一个应用程序按预期工作,我不知道有什么不同。我突然想到,可能有一些冲突,因为他们都在使用提供的@id/android:list,但他们在不同的活动中,我没有发现其他人抱怨相同的问题,所以我不确定 下面是一组代码。如果有任何建议,我将不胜感激 工作: @Override protected void onListItemClick(ListView l, View v, int positi
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
// get the item that was clicked
v_ProjectInvestigatorSiteContact project = (v_ProjectInvestigatorSiteContact) this.getListAdapter().getItem(
position);
Intent myIntent = new Intent(this, Details.class);
myIntent.putExtra(res.getString(R.string.project), project);
startActivity(myIntent);
}// onListItemClick
不工作:
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
// get the item that was clicked
final v_SitePeople vSitePeople = (v_SitePeople) this.getListAdapter().getItem(
position);
AlertDialog.Builder builder = new AlertDialog.Builder(Share.this);
builder.setTitle(res.getString(R.string.forgot_password_check_dialog_title))
.setMessage(res.getString(R.string.share_check_dialog_text))
.setPositiveButton(res.getString(R.string.send), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
sendShareEmail(vSitePeople);
}
}).setNegativeButton(res.getString(R.string.cancel), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// cancelled, so do nothing
}
});
AlertDialog msgBox = builder.create();
msgBox.show();
}// onListItemClick
工作XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffffff"
android:orientation="vertical" >
<!-- dummy item to prevent edittext from gaining focus on activity start -->
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_background" >
<ImageView
android:id="@+id/logo"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:scaleType="centerCrop"
android:src="@drawable/ic_logo" >
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/logo"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingLeft="50dp"
android:paddingRight="60dp"
android:paddingTop="5dp"
android:text="@string/app_header"
android:textColor="#ffffffff"
android:textSize="15sp"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/search_gradient" >
<ImageView
android:id="@+id/searchBoxIcon"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:scaleType="centerCrop"
android:src="@drawable/action_search" >
</ImageView>
<EditText
android:id="@+id/searchBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="@+id/searchBoxIcon"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:layout_toRightOf="@+id/searchBoxIcon"
android:background="@drawable/search_box"
android:hint="@string/search_hint"
android:inputType="text"
android:maxLines="1"
android:minHeight="30sp"
android:paddingBottom="2dp"
android:paddingLeft="25sp"
android:paddingTop="2dp"
android:textColor="#ff000000" />
</RelativeLayout>
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/divider_gray"
android:cacheColorHint="#00000000"
android:divider="@color/divider_gray"
android:dividerHeight="1dp"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false" />
<TextView
android:id="@+id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/loading"
android:textColor="@color/loading_gray"
android:textSize="20sp" />
</LinearLayout>
非常感谢你的帮助
需要更多的代码
工作setListAdapter:
public void updateDisplay(ArrayList<v_ProjectInvestigatorSiteContact> vProjectInvestigatorSiteContactList)
{
if (fullAdapter != null)
{
if (fullAdapter.isEmpty())
{
fullAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
fullAdapter = reOrder(fullAdapter);
setListAdapter(fullAdapter);
}
else
{
filteredAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
filteredAdapter = reOrder(filteredAdapter);
setListAdapter(filteredAdapter);
}
}
else
{
fullAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
fullAdapter = reOrder(fullAdapter);
setListAdapter(fullAdapter);
}
}// updateDisplay
public void updateDisplay(ArrayList<v_SitePeople> vSitePeopleShareList)
{
adapter = new ShareAdapter(this, R.layout.share_row, vSitePeopleShareList);
setListAdapter(adapter);
}// updateDisplay
工作列表设置:
private class DownloadProjectsTask extends AsyncTask<String, Void, ArrayList<v_ProjectInvestigatorSiteContact>> {
@Override
protected ArrayList<v_ProjectInvestigatorSiteContact> doInBackground(String... URLs)
{
return ProjectsHelper.parseProjects(URLs, CurrentStudies.this);
}// doInBackground
@Override
protected void onPostExecute(ArrayList<v_ProjectInvestigatorSiteContact> vProjectInvestigatorSiteContactList)
{
updateDisplay(vProjectInvestigatorSiteContactList);
}// onPostExecute
}// DownloadProjectsTask
private class DownloadShareTask extends AsyncTask<String, Void, ArrayList<v_SitePeople>> {
@Override
protected ArrayList<v_SitePeople> doInBackground(String... params)
{
return ProjectsHelper.getSharePeople(params[0], Share.this);
}// doInBackground
@Override
protected void onPostExecute(ArrayList<v_SitePeople> vSitePeopleShareList)
{
updateDisplay(vSitePeopleShareList);
}// onPostExecute
}// DownloadProjectsTask
工作适配器:
公共类ProjectAdapter扩展了ArrayAdapter{
私有ArrayList项;
私人资源
public ProjectAdapter(Context context, int textViewResourceId, ArrayList<v_ProjectInvestigatorSiteContact> items)
{
super(context, textViewResourceId, items);
this.items = items;
this.res = context.getResources();
}// ProjectAdapater
@Override
public int getCount()
{
return items.size();
}
@Override
public v_ProjectInvestigatorSiteContact getItem(int position)
{
return items.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public int getViewTypeCount()
{
return 2;
}
@Override
public int getItemViewType(int position)
{
if (items.get(position).ProjectID == null)
{
return 0;
}
else
{
return 1;
}
}
@Override
public boolean isEnabled(int position)
{
if (getItemViewType(position) == 0)
{
return false;
}
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
int type = getItemViewType(position);
if (convertView == null)
{
holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (type == 0)
{
convertView = vi.inflate(R.layout.row_header, null);
}
else
{
convertView = vi.inflate(R.layout.row, null);
}
convertView.setTag(holder);
}// if
else
{
holder = (ViewHolder) convertView.getTag();
}
v_ProjectInvestigatorSiteContact i = items.get(position);
if (i != null)
{
TextView topText = (TextView) convertView.findViewById(R.id.toptext);
TextView bottomText = (TextView) convertView.findViewById(R.id.bottomtext);
if (topText != null)
{
if (i.ProtocolNumber != null)
{
if (i.WebIndication != null)
{
topText.setText(i.ProtocolNumber);
bottomText.setText(i.WebIndication);
}
else if (i.ProjectName != null)
{
topText.setText(i.ProtocolNumber);
bottomText.setText(i.ProjectName);
}
}// if has ProtocolNumber
else
{
if (i.WebIndication != null)
{
topText.setText(i.WebIndication);
topText.setMinHeight(40);
topText.setGravity(Gravity.CENTER_VERTICAL);
}
else if (i.ProjectName != null)
{
topText.setText(i.ProjectName);
topText.setMinHeight(40);
topText.setGravity(Gravity.CENTER_VERTICAL);
}
else
{
topText.setText(i.SiteID);
topText.setMinHeight(40);
topText.setGravity(Gravity.CENTER_VERTICAL);
}
}// if does not have ProtocolNumber
}// if
// Coming Soon logic
if (i.ProjectStatusID != null)
{
if (i.ProjectStatusID.equals(res.getString(R.string.feasibility_id)))
{
topText.setTextColor(res.getColor(R.color.coming_soon_gray));
bottomText.setText("(Coming Soon)");
}
else {
topText.setTextColor(Color.BLACK);
}
}//if
if (bottomText != null)
{
if (type == 0)
{
if (position == getCount() - 1 || getItemViewType(position + 1) == 0)
{
bottomText.setVisibility(View.VISIBLE);
bottomText.setText(res.getString(R.string.no_studies));
bottomText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 0, (float) 1.0));
}
else
{
bottomText.setVisibility(View.GONE);
}
}// header followed by another header, or end of list
}// if
//recenters row headers
if (type == 0)
{
topText.setGravity(Gravity.CENTER);
}
}// if
return convertView;
}// getView
public static class ViewHolder {
public TextView textView;
}
}//项目适配器
setListAdapter不工作:
public void updateDisplay(ArrayList<v_ProjectInvestigatorSiteContact> vProjectInvestigatorSiteContactList)
{
if (fullAdapter != null)
{
if (fullAdapter.isEmpty())
{
fullAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
fullAdapter = reOrder(fullAdapter);
setListAdapter(fullAdapter);
}
else
{
filteredAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
filteredAdapter = reOrder(filteredAdapter);
setListAdapter(filteredAdapter);
}
}
else
{
fullAdapter = new ProjectAdapter(this, R.layout.row, vProjectInvestigatorSiteContactList);
fullAdapter = reOrder(fullAdapter);
setListAdapter(fullAdapter);
}
}// updateDisplay
public void updateDisplay(ArrayList<v_SitePeople> vSitePeopleShareList)
{
adapter = new ShareAdapter(this, R.layout.share_row, vSitePeopleShareList);
setListAdapter(adapter);
}// updateDisplay
非工作列表设置:
private class DownloadProjectsTask extends AsyncTask<String, Void, ArrayList<v_ProjectInvestigatorSiteContact>> {
@Override
protected ArrayList<v_ProjectInvestigatorSiteContact> doInBackground(String... URLs)
{
return ProjectsHelper.parseProjects(URLs, CurrentStudies.this);
}// doInBackground
@Override
protected void onPostExecute(ArrayList<v_ProjectInvestigatorSiteContact> vProjectInvestigatorSiteContactList)
{
updateDisplay(vProjectInvestigatorSiteContactList);
}// onPostExecute
}// DownloadProjectsTask
private class DownloadShareTask extends AsyncTask<String, Void, ArrayList<v_SitePeople>> {
@Override
protected ArrayList<v_SitePeople> doInBackground(String... params)
{
return ProjectsHelper.getSharePeople(params[0], Share.this);
}// doInBackground
@Override
protected void onPostExecute(ArrayList<v_SitePeople> vSitePeopleShareList)
{
updateDisplay(vSitePeopleShareList);
}// onPostExecute
}// DownloadProjectsTask
我想出来了。我从来没有发布过相关的代码,否则我相信你们会帮我发现的 我从一段工作代码中复制了一个不工作的适配器,如果viewType为0,该代码将返回false。由于我的第二个列表只有一种类型,所以所有内容都被禁用
谢谢大家的努力。很抱歉,我没有给您提供正确的代码。最重要的是,您的两个活动都是从ListActivity扩展而来的,因为一旦您在xml中提供了默认的android:id/list属性,系统就会这样做。是这样吗?另外,共享设置每个列表和设置适配器的代码。是。它们都扩展了ListActivity。我将使用您请求的代码编辑OP。我将尝试删除xml行中relativeLayout的权重。你不能在相对论中使用重量。这意味着什么不起作用?它是崩溃还是抛出异常?或者它会显示一个黑屏而不是列表?列表会按预期显示,但单击stuff时不会调用onListItemClick。我希望您已经了解了复制粘贴编程的陷阱。当您有这样的复制时,通常最好将其重构为可重用的类和/或方法。