我有一个由新闻服务器纲要(只是一个故事片段列表)填充的 ListView 和一个用于修改该 ListView 的 arrayAdapter。
我可以通过 'remove(Object)' 函数删除项目,但是如果有多个 'Object' 实例怎么办?remove() 仅删除了“Object”的第一个实例。例如,如果不删除第一个对象,我将无法删除数组适配器中的第二个“对象”。所以我的问题是我该如何解决这个问题?
例如:破败A
story 1
story 2
Break
story 3
story 4
Break
story 5
etc...
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我不能删除第二个 'Break',因为 remove('Break') 将删除第一个。如果我可以 removeByIndex(5),那就完美了,但是....
我尝试编写我自己的删除函数,该函数创建一个全新的适配器,其中包含除指定索引之外的所有成员。这就是我在搞什么。
public ArrayAdapter<String> removeIndex(ArrayAdapter<String> arr, int index) {
ArrayAdapter<String> temp = new ArrayAdapter<String>(arr.getContext(),R.layout.list_item);
for(int i =0 ; i<arr.getCount();i++){
if(i != index) temp.add(arr.getItem(i));
}
return temp;
}
Run Code Online (Sandbox Code Playgroud)
帮助或建议是appriciated。
我使用以下来填充我的列表视图,如果我点击btn_Delete,我不想显示项目,我成功从hasValues中删除了项目,但它显示了listview中的空白项目,
我想从列表中删除此空白列表视图项目.
如果有人知道怎么做,请回复.
谢谢,
private class MyArrayAdapter extends ArrayAdapter
{
private List<HashMap<String, String>> myData = new ArrayList<HashMap<String, String>>();
public MyArrayAdapter(Context context, int textViewResourceId, List<HashMap<String, String>> objects)
{
super(context, textViewResourceId, objects);
context = getContext();
myData = objects;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View v = convertView;
try
{
if(v == null)
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listSomeThing, null);
}
if(hasValues != null && !hasValues.get(DatabaseConstant.key_STATUS).equals("D"))
{
btn_Delete.setOnClickListener(new View.OnClickListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我有多个类,它们都扩展了一些BasicDataModel:
public class NewsItem extends BasicDataModel
public class PhotosItem extends BasicDataModel
Run Code Online (Sandbox Code Playgroud)
所以我需要为它们制作ArrayAdapter,我想知道是否可以制作一些通用的ArrayAdapter以适应我的所有对象.到目前为止,我试图做
public class MyAdapter extends ArrayAdapter<BasicDataModel>
Run Code Online (Sandbox Code Playgroud)
但是,只要我传递ArrayList,例如,这不起作用.
提前致谢
这就是我向ListView添加项目的方法:
public class ServersAdapter extends ArrayAdapter<String> {
public ServersAdapter(Context context, int resource, int textViewResourceId, String[] servers) {
super(context, resource, textViewResourceId, servers);
Log.d("noc", "ServersAdapterin: ");
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("noc", "getView: ");
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.servers_list, parent, false);
Log.d("noc", "inflate: ");
//datasource = new ServersDataSource(getContext());
datasource.open();
//servir list
Log.d("noc", "ServersDataSource: ");
Server[] servers = datasource.getAllServers();
ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
TextView tv = (TextView) …Run Code Online (Sandbox Code Playgroud) 我创建一个列表视图,并在我的自定义对话框中实现该列表视图.该列表视图使用数组适配器,在我的数组适配器中,我使用自己的布局和所需的颜色.代码如下.
listView = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(Loged.this,
R.layout.my_spinner_layout, items);
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
在这里,单击我的列表项的监听器工作正常.
问题现在开始了.我的自定义警报对话框中需要一个列表视图,每行包含一个单选按钮.我使用相同的方法.这是我的代码.
listView = new ListView(context);
ArrayAdapter<String>adapter = new ArrayAdapter<String>(context,R.layout.my_single_choice_layout, choice);
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
这里可以同时检查所有radioButtons.我的听众工作不正常
my_spinner_layout_xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
style="@style/ListItemTextColor"
/>
Run Code Online (Sandbox Code Playgroud)
和my_single_choice_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:id="@+id/my_choice_radio"
android:layout_height="match_parent"
android:button="@null"
android:drawableRight="@android:drawable/btn_radio"
android:text="Option"
style="@style/ListItemTextColor" >
</RadioButton>
Run Code Online (Sandbox Code Playgroud) 我想在列表视图的每一行中显示N个imageview.imageview的数量取决于json解析值.每次从服务器获取json时,它可以是2或3或4.
所以我不能通过使用inflate使用静态xml.所以我决定在getview方法中创建动态视图并在视图中添加N个imageview
我写下面的代码,但它仍然只显示一个imageview和水平滚动根本不工作..
任何帮助表示赞赏
public class MyAdapter extends BaseAdapter{
private LayoutInflater inflater;
private ArrayList<String> data;
Context con;
public MyAdapter(Context context, ArrayList<String> data1){
// Caches the LayoutInflater for quicker use
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Sets the events data
data= data1;
con=context;
}
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder=new ViewHolder(); //our view holder of the row
if (view == null) {
HorizontalScrollView hr=new HorizontalScrollView(con);
LinearLayout layout=new LinearLayout(con);
layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
//layout set some properties
for(int i=1;i<2;i++)
{
holder.image …Run Code Online (Sandbox Code Playgroud) 我在另一个Activity类中使用了相同的模式,它完美地运行.但是在这个类(也是一个Activity)中,从不调用getView .我通过记录fbFriendMatchAdapter.getCount()确认适配器中有9个项目.我已经尝试将数据源更改为String []变量,但这对getView的(缺少)没有影响.
我很感激任何建议!我已经彻底研究过了.这个问题有很多种,但都没有解决我的问题.这就是我发布新问题的原因.
//Here is the ArrayList data source definition.
//It is loaded using a for loop with 9 values.
private List<String> fbFriendMatchAdapter=new ArrayList<String>();
// Here is the Custom Array Adapter
ArrayAdapter<String> fbFriendMatchAdapter = new ArrayAdapter<String>(this,
R.layout.row_left, R.id.ListViewName, fbFriendPotentialMatchArrayList) {
@Override
public View getView(final int dialogPosition, View convertView, ViewGroup listParent) {
LayoutInflater inflater = getLayoutInflater();
View fbFriendMatchDialogViewRow = inflater.inflate(R.layout.row_left, listParent, false);
Log.d(BBTAG, String.format("BBSetup getView[%s] name=%s", dialogPosition, buddyDisplayName ));
return fbFriendMatchDialogViewRow;
} // [END getView]
@Override
public String …Run Code Online (Sandbox Code Playgroud) 我正在处理一个包含列表视图的片段(此片段是在创建活动时生成的PlaceHolderFragment)。我扩展了ArrayAdapter来制作我的自定义适配器,并用该适配器填充我的列表视图。
重要的一件事是在列表视图的一行中,有2个按钮:第一个是启用/禁用按钮,用于更改用户的状态(当用户的状态为活动时,则禁用,否则为启用),第二个是删除按钮(用于删除用户)。所以我必须在适配器的方法getView()中为这2个按钮实现OnClickListener
单击任一按钮时,它将向服务器发送请求并操纵数据库(更改用户状态或从数据库中删除用户)。事情是当我单击启用按钮(例如)时,成功并且数据库中的用户状态发生了更改;或者当我单击删除按钮时,用户将成功从数据库中删除
但是,单击该按钮后,它的状态不会更改(我的意思是如果启用了用户,那么现在该按钮必须更改为禁用,或者如果删除了用户,则必须从屏幕上删除该行)。我必须手动重新加载此片段(切换到其他片段然后再回来)
问题是如何重新加载活动(我已经实现了onResume来将所有数据加载到适配器,所以如果我可以让此方法运行片段的onResume,它将按我的预期工作),或者至少如何将listview重新加载到更新新数据?
注意:notifyDataSetChanged()无效,因为适配器中的数据实际上尚未更改,仅服务器上的数据已更改
注意2:如果您需要我发布代码,请发表评论,因为我的代码很长,所以我将编辑我的帖子。
感谢你并致以真诚的问候!
编辑1 我已经在下面的答案中发布了我的解决方案,它解决了这个问题,但是我不得不说这是android中非常糟糕的做法。例如,当您想用这种方法删除一个项目时,您可能想放置一个AlertDialog供用户确认,但是AlertDialog只能在Activity(或Fragment)中显示,而不能从Adapter中显示。因此,您应该使用一些其他方法,例如ContextMenu或CustomDialog。
我有一个用于显示名称的列表视图。如果我滚动屏幕,它会显示错误的名称。我知道这是一个常见的错误,根源于适配器的 getView 方法,但是尽管遵循了许多现有讨论中提出的方法,但仍无法解决它。
我已将我的代码粘贴在下面。如果有人能够识别该错误,那就太好了。
定制适配器
public class ListArrayAdapter extends ArrayAdapter<client> {
HashMap<String, Integer> hMap = new HashMap<String, Integer>();
private Context cntxt;
private List<client> client_list;
private int textviewres;
public ListArrayAdapter(Context context, int textViewResourceId, List<client> objects) {
super(context,textViewResourceId,objects);
this.cntxt = context;
this.textviewres = textViewResourceId;
this.client_list = objects;
for(int j=0; j<client_list.size(); j++){
Log.d("ListArrayAdapter", "Position No" +j +": " +client_list.get(j).getName());
Log.d("ListArrayAdapter", "Total elements in the client list is "+client_list.size());
}
}
@Override
public long getItemId(int position) {
client item = getItem(position);
return item.getID();
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个AutoCompleteTextView以显示自定义对象。因此,我实现了自己的 ArrayAdapter,但它不起作用,当我在文本字段中输入内容时没有显示任何建议。有人能帮我吗?
public class AutoCompleteArrayAdapter extends ArrayAdapter<Object>{
List<Object> mObjectList;
Context mContext;
LayoutInflater mInflater;
int mResourceId;
public AutoCompleteArrayAdapter(Context context, int resource, List<Object> objectList) {
super(context, resource, objectList);
mResourceId = resource;
mObjectList = objectList;
mContext = context;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null) {
convertView = mInflater.inflate(mResourceId, parent, false);
}
Object object = mObjectList.get(position);
TextView textViewItem = (TextView) convertView.findViewById(R.id.textView_dropDown);
textViewItem.setText(object.getString());
return convertView;
}
@Override
public int getCount() {
return …Run Code Online (Sandbox Code Playgroud) android autocompletetextview android-arrayadapter android-adapter