我正在尝试编写一个列表,其中包含一些可扩展的项目和一些单项.我希望这样,当单击一个项目或可扩展列表子项时,我可以根据项目的文本调用intent.
我认为可扩展列表可以工作,但有没有办法在可扩展列表中设置项目,以便它们没有可扩展列表图标?我应该使用字符串数组以外的东西吗?
做这个的最好方式是什么?
谢谢
下面是我不完整的代码,我想在"亚特兰大"和"波士顿"之间插入项目"区域1","区域2","区域3"或作为亚特兰大的子集:
package test.lists.special;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class SpecialList extends ListActivity{
TextView toptext;
String[] items={"Atlanta", "Boston", "Chicago", "Dallas"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
items));
toptext=(TextView)findViewById(R.id.toptext);
}
public void onListItemClick(ListView parent, View v, int position,
long id) {
Intent intent = new Intent();
if (parent.getItemAtPosition(position)=="Atlanta")
{
//THIS IS WHERE I WISH TO INSERT "ZONE 1", "ZONE 2", "ZONE …Run Code Online (Sandbox Code Playgroud) 我有一个半复杂的问题,希望有人能够帮助我.
在单击事件上,我创建一个线程并基于此方法启动长时间运行的操作.在长时间运行的任务完成后,它会回调到另一种方法,它不后的处理程序:
@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
remindersList = newRemindersList;
mHandler.post(mUpdateDisplayRunnable);
}
Run Code Online (Sandbox Code Playgroud)
哪个叫Runnable:
// post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
public void run() {
updateDisplay();
}
};
Run Code Online (Sandbox Code Playgroud)
最后,这是我的updateDisplay()方法正在做的事情:
private void updateDisplay() {
if (csModel.getState() != Model_ContentSearch.State.RUNNING) {
if(remindersList != null && remindersList.size() > 0){
r_adapter = new ReminderAdapater(Activity_ContentSearch.this, remindersList, thisListView);
thisListView.setAdapter(r_adapter);
r_adapter.notifyDataSetChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我正常地这样做时,这很好用.不过,如果我更改方向的长时间运行的操作运行时,这是行不通的.它确实使回调正确,并且remindersList确实包含项目.但是当它达到这条线时:
r_adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
什么都没发生.奇怪的是,如果我做的另一项提交并使其再次运行全过程(不改变方向),它实际上更新视图两次,一次为前下一个提交又一次.所以一旦与第一结果视图更新提交,然后再次与第二提交第二次以后的结果.因此,适配器DID获取数据,它只是不刷新视图.
我知道这与方向改变有关,但我不能为我的生活找出原因.有人可以帮忙吗?或者,任何人都可以建议一种处理方向更改线程的替代方法吗?
巴拉
multithreading android listview orientation android-arrayadapter
我有一个非常简单的列表,每行有3个textview字段.我们使用来自后台webservice调用(AsyncTask)的数据每2秒左右更新一次它们的值
我们将即将到来的值与当前值进行比较,在Adapter上相应地更新它们,最后如果需要调用notifyDataSetChanged()
问题是,当我们一次获得超过3个更新行时,重绘变得非常慢,从而挂起整个UI.当然,我们使用所有ListView众所周知的优化,例如EfficientAdapter方法(setTag()和holder),以及getViewTypecount()/ getItemViewType().我们还尝试使用layoutopt尽可能地优化我们的界面,并尝试避免wrap_content宽度和高度来减轻负担.
我们不会对我们的更新执行昂贵的操作,只是标准的东西:更改TextView文本,textcolor和backgroundcolor值.
我能看到的唯一奇怪的事情就是每行调用getView()3-4-5次,虽然我已经阅读了所有那些Romain的消息[1],告诉他们没有错
关于如何加快速度的任何想法或提示?
非常感谢你!
我在这个上浪费了太多时间,所以不得不再问一次.我不知道为什么会发生这种情况.
我有一个数组适配器(aAdapter)和一个数组列表(aList),我试图用一个清除按钮来清除数据库中的条目并清除列表.
我的问题是NotifyDataSetChanged()只是在我的onlick方法中不起作用:
public void clearDB(View view) {
aList.clear();
aAdapter.notifyDataSetChanged();
HighScoresDB hsdb = new HighScoresDB(HighScoresActivity.this);
hsdb.openDB();
hsdb.clearDB();
hsdb.closeDB();
}
Run Code Online (Sandbox Code Playgroud)
它适用于其他任何地方.我甚至尝试将clear和notifyDataSetChanged()放在另一个方法中并调用它但是这也不起作用但是当我从onCreate调用它时它确实有效....
有任何想法吗?
ps正在清除数据库.
我正在尝试使用自定义适配器和listview设置来设置onItemClickListener.似乎无法让听众工作.我认为我没有正确设置它.任何帮助表示赞赏.非常感谢.
适配器:
public class ModuleAdapter extends ArrayAdapter<Module> {
Context context;
int layoutResourceId;
Module data[];
public ModuleAdapter(Context context, int layoutResourceId,
Module data[]) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ModuleHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ModuleHolder();
holder.modJapTitle = (TextView)row.findViewById(R.id.moduleJapTitle);
holder.modEngTitle = (TextView)row.findViewById(R.id.moduleEngTitle);
holder.modComp = (TextView)row.findViewById(R.id.moduleCompletion);
holder.modRating …Run Code Online (Sandbox Code Playgroud) 我有一个MultiAutoCompleteTextView,它允许您输入多个条目并显示自动填充建议.我提交数据时出现问题.我将任何输入的字符串添加到下拉列表中,但我尝试对数据进行排序失败.在提交时执行的代码:
final private Comparator<String> comp = new Comparator<String>() {
public int compare(String e1, String e2) {
return e1.toString().compareTo(e2.toString());
}
};
((ArrayAdapter<String>) autoCompleteView.getAdapter()).add(getString());
((ArrayAdapter<String>) autoCompleteView.getAdapter()).sort(comp);
Run Code Online (Sandbox Code Playgroud)
单击autoCompleteView时发生的代码:
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
adapter.getFilter().filter(null);
//adapter.sort(comp);
view.showDropDown();
}
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以发现我正在做的事情有什么问题吗?
编辑:在收集@Sam的更改后的更多信息
private ArrayList<String> array = new ArrayList<String>();
private ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,
array);
private void setUpAutoComplete(final MultiAutoCompleteTextView view)
{
array.add("test string"); // this is successfully added to the drop down list
Collections.sort(array, comp);
adapter.notifyDataSetChanged();
}
private void onSubmit()
{ …Run Code Online (Sandbox Code Playgroud) 在某些手机上,主要是Galaxy S2,我遇到的问题是自定义适配器的结果相互重叠.这是用户在搜索字段中搜索单词"阴道"的示例,它是医疗应用程序.

我不确定描述这个的最好方法,而且代码在这一点上非常复杂.用户键入单词,数据库结果显示匹配.这些结果位于List对象中并通过适配器显示.在大多数手机上,这可以按预期工作,结果是连续的.在至少一个设备上,上面的屏幕截图发生了.
这是一个已知错误,我该如何解决?
我试图存储一个arraylist onSavedInstanceState()的值并在onCreate方法中获取数组列表中的值,但它引发了一个像无法暂停活动的爱
这是我的代码
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putParcelable("Old", (Parcelable) profileDetails );
super.onSaveInstanceState(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
在我的 onCreate()
if (savedInstanceState != null) {
profileDetails= (ArrayList<ProfileDetails>)savedInstanceState.getParcelable("Old");
}
else {
profileDetails = GetSearchResults();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个能够浏览手机上文件的Android应用程序.当我在模拟器上运行应用程序时,出现以下错误:
02-18 22:14:17.839: E/AndroidRuntime(896): FATAL EXCEPTION: main
02-18 22:14:17.839: E/AndroidRuntime(896): android.content.res.Resources$NotFoundException: Resource ID #0x0
02-18 22:14:17.839: E/AndroidRuntime(896): at android.content.res.Resources.getValue(Resources.java:1018)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.content.res.Resources.getDrawable(Resources.java:663)
02-18 22:14:17.839: E/AndroidRuntime(896): at com.example.App.FileArrayAdapter.getView(FileArrayAdapter.java:56)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.AbsListView.obtainView(AbsListView.java:2033)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.makeAndAddView(ListView.java:1772)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.fillDown(ListView.java:672)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.fillFromTop(ListView.java:732)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.layoutChildren(ListView.java:1625)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.AbsListView.onLayout(AbsListView.java:1863)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewGroup.layout(ViewGroup.java:4224)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 …Run Code Online (Sandbox Code Playgroud) 我有一个完美的自定义列表视图.现在,我希望列表中的每个项目都有一个下拉菜单,这样当用户点击列表中的任何项目时,下拉菜单会显示两个选项 - 编辑和删除.根据用户的选择,列表视图项被处理.
我想知道将下拉菜单添加到每个listview项的方法.
列表项的xml文件 -
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="120dp"
android:background="#FFFFFF">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:id="@+id/chkitem"
android:layout_alignParentLeft="true"
/>
<TextView android:id="@+id/textTitle"
android:layout_width="200dp"
android:layout_height="60dp"
android:textSize="15dp"
android:textColor="#000000"
android:textStyle="bold"
android:gravity="fill"
android:layout_toRightOf="@+id/chkitem"
/>
<TextView
android:layout_width="200dp"
android:layout_height="60dp"
android:id="@+id/detail"
android:textSize="15dp"
android:textStyle="italic"
android:gravity="fill"
android:layout_toRightOf="@+id/chkitem"
android:layout_below="@+id/textTitle"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
适配器类
public class list_addr_adapter extends ArrayAdapter<list_addr> {
Context context;
int layoutResourceId;
public list_addr_adapter(Context context, int layoutResourceId, List<list_addr> items) {
super(context, layoutResourceId, items);
this.layoutResourceId = layoutResourceId;
this.context = context;
// this.listener=callback;
}
/*private view holder class*/
private class ViewHolder { …Run Code Online (Sandbox Code Playgroud) android listview android-custom-view android-arrayadapter drop-down-menu
android ×10
listview ×4
adapter ×1
exception ×1
list ×1
orientation ×1
performance ×1
redraw ×1
resources ×1
sorting ×1