正如标题所示,当我点击项目内的视图时,我想知道项目的确切位置.
假设我在ArrayAdapter的getView()方法中有以下代码:
...
holder = new ViewHolder ();
holder.iconAction = (ImageView)convertView.findViewById (R.id.download_item_iconAction);
holder.iconAction.setOnClickListener (new View.OnClickListener(){
@Override
public void onClick (View v){
//Item X is clicked
}
});
...
Run Code Online (Sandbox Code Playgroud)
在onClick()中,我知道点击的视图,v,但我不知道项目的位置.
我们来做个伎俩.当getView()创建视图时,我将在ViewHolder中保存位置:
public View getView (int position, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder ();
holder.iconAction = (ImageView)convertView.findViewById (id);
holder.iconAction.setOnClickListener (new View.OnClickListener(){
@Override
public void onClick (View v){
int pos = (Integer)v.getTag ();
}
});
holder.iconWait.setTag (position);
...
}else{
holder = (ViewHolder)convertView.getTag ();
}
... …Run Code Online (Sandbox Code Playgroud) 嗨,这是我的第一篇文章,这是我的第一个更高级的应用程序,我的Android手机...我知道这个主题在这里提到,谷歌知道很多例子,但他们并不是什么我看起来形式;(
我承认我是一个n00000b ...在Android编码方面...我开始...几天前,请原谅我:)
问题是我的listview元素没有填充.应用程序编译并运行没有错误,但它没有午餐getView.从我在网上看到的内容......我需要这个以显示我心爱的列表视图及其内容......
请帮忙 :)
package com.test.stackParser;
public class StackParserActivity extends Activity {
/** Called when the activity is first created. */
private ProgressDialog pd;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//final TextView tv = (TextView) findViewById(R.id.textView1);
//tv.setMovementMethod(new ScrollingMovementMethod());
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(myListener);
}
private OnClickListener myListener = new OnClickListener() {
public void onClick(View v) {
pd = ProgressDialog.show(StackParserActivity.this, "Working...", "request to server", true, false);
new ParseSite().execute("http://multikino.pl/pl/repertuar/warszawa-ursynow/2011-09-02/");
}
};
private class ParseSite extends AsyncTask<String, Void, List<String>> { …Run Code Online (Sandbox Code Playgroud) 有没有办法替换ArrayAdapter中的值
mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name);
..
..
for (BluetoothDevice device : pairedDevices) {
String name = MPGDeviceDetailsControl.getDeviceDetails(this, device.getAddress(), device.getName()).getDisplayName();
mPairedDevicesArrayAdapter.add(name + "\n" + device.getAddress());
}
Run Code Online (Sandbox Code Playgroud)
如果我希望替换其中一个条目,有任何方法可以不删除和重新输入.问题在于它把它置于底部.
我有一个后台服务,它从服务器接收消息,并使用这些消息更新ListView中显示的对象的内部属性.
我总是使用runOnUiThread方法来运行listArrayAdapter.notifyOnDataSetChanged()命令.
从某些原因,有时ListView会刷新,它确实显示了属性更新,有时它不会...
为了测试我已经为我的ListView添加了一个"刷新"按钮,当它按下时,执行listArrayAdapter.notifyOnDataSetChanged().
每次单击按钮,视图都会完美刷新..
我真的不明白为什么当试图从服务中刷新它并不总是有效但我想我可能并不总是在UIThread上运行...
我真的很绝望,很乐意得到帮助..
我的守则
ServerConnectionManager.java - 扩展服务
//example of a command executed when a specific message received from the server:
//app is the Application variable
public void unFriend(int userId)
{
serverResponseManager.onUnFriend(app.getApplicationFriend(userId),false);
}
Run Code Online (Sandbox Code Playgroud)
ServerResponseManager.java - 处理服务器消息的所有应用程序响应的类:
public void onUnFriend(FacebookUser facebookUser, boolean isYouRemovedClient) {
//this is the property which will effect the ListView view when calling the
//arrayListAdataper.notifyOnDataSetChanged();
facebookUser.setApplicationFriend(false);
app.getApplicationFriends().remove(facebookUser);
app.getDatabaseManager().deleteApplicationFriend(facebookUser.getId());
//if the application is currently running in the UI (not on the background) it will run a …Run Code Online (Sandbox Code Playgroud) 我有一个自定义ArrayAdapter.当ListViews中显示数据时,我总是希望它排序,因此我尝试覆盖notifyDataSetChanged()以首先对适配器进行排序,如下所示:
@Override
public void notifyDataSetChanged() {
sort(new Comparator<IceContact>() {
@Override
public int compare(IceContact iceContact, IceContact iceContact2) {
return iceContact.compareTo(iceContact2);
}
});
super.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
IceContact类是一个实现Comparable的get-set类.不幸的是,这给了我一个具有讽刺意味的StackOverflowError(下面的logcat).然后我试着反过来做.直接覆盖sort()并notifyDataSetChanged()直接调用,如下所示:
@Override
public void sort(Comparator<? super IceContact> comparator) {
super.sort(comparator);
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
这很好用!有谁能解释为什么?感觉它们几乎完全相同.
01-21 18:25:50.725: ERROR/AndroidRuntime(2490): FATAL EXCEPTION: main
java.lang.StackOverflowError
at android.view.View.setFocusableInTouchMode(View.java:5584)
at android.widget.AdapterView.checkFocus(AdapterView.java:717)
at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:812)
at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:6044)
at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50)
at android.widget.ArrayAdapter.notifyDataSetChanged(ArrayAdapter.java:286)
at se.naxiait.curbits.utils.IceContactAdapter.notifyDataSetChanged(IceContactAdapter.java:70)
at android.widget.ArrayAdapter.sort(ArrayAdapter.java:278)
at se.naxiait.curbits.utils.IceContactAdapter.notifyDataSetChanged(IceContactAdapter.java:71)
at android.widget.ArrayAdapter.sort(ArrayAdapter.java:278)
at se.naxiait.curbits.utils.IceContactAdapter.notifyDataSetChanged(IceContactAdapter.java:71)
at android.widget.ArrayAdapter.sort(ArrayAdapter.java:278)
at se.naxiait.curbits.utils.IceContactAdapter.notifyDataSetChanged(IceContactAdapter.java:71)
at android.widget.ArrayAdapter.sort(ArrayAdapter.java:278)
at se.naxiait.curbits.utils.IceContactAdapter.notifyDataSetChanged(IceContactAdapter.java:71)
at …Run Code Online (Sandbox Code Playgroud) 在这个Stackoverflow的答案中,表明过滤可以在ListView不覆盖类的getFilter方法的情况下完成ArrayAdapter,而是toString在POJO类中实现.
我试过实现它,但过滤不正常.虽然ListView会进行过滤,但它不会在数组中显示正确的项目.因此,例如,如果过滤器匹配单个行,array则会显示一个项目ListView,但显示的是错误的项目.在这种情况下,始终显示数组的第一项,而不是实际匹配输入的搜索文本的项.
这是我的代码ArrayAdapter:
public class TitleListingArrayAdapter extends ArrayAdapter<Title> {
private List<Title> items;
private Context context;
public TitleListingArrayAdapter(Context context, int textViewResourceId, List<Title> items) {
super(context, textViewResourceId, items);
this.items = items;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.titlelisting_single_row, …Run Code Online (Sandbox Code Playgroud) 我有一个简单的数组Strings,我是在水平显示ListView用ArrayAdapter.我要做的是:当用户从中选择一个项目时ListView,使该项目不可点击并更改该项目的背景颜色.也许就像一个"灰暗"的外观.我正在研究创建一个自定义Adapter并覆盖该isEnabled(int position)方法,但我不知道我会怎么做.任何建议,建议或帮助将不胜感激!
我正在尝试使用ArrayList填充ListView。ArrayList包含Usuarios对象。Usuario具有两个字段(字符串nombre,字符串edad)。这是我的代码:
ListView listview = (ListView) findViewById(R.id.ListView1);
ArrayList<Usuario> listaUsuarios = (ArrayList<Usuario>) dao.showAll();
ArrayAdapter<Usuario> adapter = new ArrayAdapter<Usuario>(this, android.R.layout.simple_list_item_1, listaUsuarios);
listview.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
当我测试我的Android应用程序时,它看起来像这样:

ListView不显示Usuario字段(nombre,edad),而是显示es.dga.sqlitetest.Usuario@43e4 ...
谁能帮我?谢谢
所以我首先要说的是,我已经看到其他几个人发布完全相同的错误.但是,我正处于尝试所有十种不同解决方案的阶段,我仍然得到完全相同的堆栈跟踪和ANR.我正在使用标准的Tabs + Swipe模板并且没有更改它上面的任何内容,除了设置第一页以返回我将在下面显示的ListView片段.
下面是我片段的代码.CacheFrament只是一个扩展的超级类android.support.v4.app.Fragment.在这种情况下,我尝试了仅返回listview及其父级,两者都无济于事.
public class RoutesFragment extends CacheFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_view_layout, container);
listView.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, new String[]{"No Routes Available"}));
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用于片段的布局,我最初将ListView作为父级,这也没有用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_list_view"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
最后,这是我不断得到的堆栈跟踪.请注意,这是我每次都得到的完全相同的错误.
07-28 11:54:43.747 15074-15074/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3387)
at android.view.ViewGroup.addView(ViewGroup.java:3258) …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-listview android-viewpager android-tabs
我不知道为什么我会得到一个NullPointerException,但它正在线上发生spinner.setAdapter(arrayAdapter).任何人都可以看看我的代码,看看问题是什么以及如何解决它.提前致谢.
这是我的代码:
public class SlidingTabsActivity extends SherlockFragmentActivity
{
ViewPager viewPager;
TabsAdapter tabsAdapter;
ActionBar actionBarTabs;
Spinner spinner;
ArrayAdapter<String> arrayAdapter;
PopupFirmware popupFirmware; // Popup firmware class instance
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
viewPager = new ViewPager(this);
viewPager.setId(R.id.pager);
setContentView(viewPager);
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, R.array.device_description);
spinner = (Spinner) findViewById(R.id.tabsSpinner);
spinner.setAdapter(arrayAdapter);
actionBarTabs = getSupportActionBar();
actionBarTabs.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBarTabs.setCustomView(spinner);
actionBarTabs.setDisplayShowCustomEnabled(true);
actionBarTabs.setDisplayHomeAsUpEnabled(true);
tabsAdapter = new TabsAdapter(this, viewPager); // Declares the tabs adapter class with the view pager view
popupFirmware = new PopupFirmware(this); // Declaring …Run Code Online (Sandbox Code Playgroud)