标签: android-arrayadapter

ArrayAdapter:按索引删除

我有一个由新闻服务器纲要(只是一个故事片段列表)填充的 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。

java android listview android-arrayadapter

3
推荐指数
1
解决办法
7729
查看次数

如何从列表视图中跳过一个视图?

我使用以下来填充我的列表视图,如果我点击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)

android list android-arrayadapter

3
推荐指数
1
解决办法
3703
查看次数

Android通用ArrayAdapter

我有多个类,它们都扩展了一些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,例如,这不起作用.

提前致谢

android android-arrayadapter

3
推荐指数
1
解决办法
2858
查看次数

如何使用自定义ListView清除ArrayAdapter

这就是我向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)

android android-arrayadapter android-listview

3
推荐指数
2
解决办法
2万
查看次数

更改数组适配器中列表项的文本颜色

我创建一个列表视图,并在我的自定义对话框中实现该列表视图.该列表视图使用数组适配器,在我的数组适配器中,我使用自己的布局和所需的颜色.代码如下.

 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)

android radio-button android-arrayadapter android-listview

3
推荐指数
1
解决办法
6439
查看次数

动态添加布局到android中适配器的getview方法

我想在列表视图的每一行中显示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)

android android-arrayadapter imageview

3
推荐指数
1
解决办法
1万
查看次数

自定义ArrayAdapter getView没有被调用 - 为什么不呢?

我在另一个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)

android android-arrayadapter

3
推荐指数
1
解决办法
8145
查看次数

如何从ArrayAdapter中的onClickListener重新加载活动

我正在处理一个包含列表视图的片段(此片段是在创建活动时生成的PlaceHolderFragment)。我扩展了ArrayAdapter来制作我的自定义适配器,并用该适配器填充我的列表视图。

重要的一件事是在列表视图的一行中,有2个按钮:第一个是启用/禁用按钮,用于更改用户的状态(当用户的状态为活动时,则禁用,否则为启用),第二个是删除按钮(用于删除用户)。所以我必须在适配器的方法getView()中为这2个按钮实现OnClickListener

单击任一按钮时,它将向服务器发送请求并操纵数据库(更改用户状态或从数据库中删除用户)。事情是当我单击启用按钮(例如)时,成功并且数据库中的用户状态发生了更改;或者当我单击删除按钮时,用户将成功从数据库中删除

但是,单击该按钮后,它的状态不会更改(我的意思是如果启用了用户,那么现在该按钮必须更改为禁用,或者如果删除了用户,则必须从屏幕上删除该行)。我必须手动重新加载此片段(切换到其他片段然后再回来)

问题是如何重新加载活动(我已经实现了onResume来将所有数据加载到适配器,所以如果我可以让此方法运行片段的onResume,它将按我的预期工作),或者至少如何将listview重新加载到更新新数据?

注意:notifyDataSetChanged()无效,因为适配器中的数据实际上尚未更改,仅服务器上的数据已更改

注意2:如果您需要我发布代码,请发表评论,因为我的代码很长,所以我将编辑我的帖子。

感谢你并致以真诚的问候!

编辑1 我已经在下面的答案中发布了我的解决方案,它解决了这个问题,但是我不得不说这是android中非常糟糕的做法。例如,当您想用这种方法删除一个项目时,您可能想放置一个AlertDialog供用户确认,但是AlertDialog只能在Activity(或Fragment)中显示,而不能从Adapter中显示。因此,您应该使用一些其他方法,例如ContextMenu或CustomDialog。

android listview android-arrayadapter onclicklistener

3
推荐指数
1
解决办法
6357
查看次数

ListView 在滚动上显示错误的项目

我有一个用于显示名称的列表视图。如果我滚动屏幕,它会显示错误的名称。我知道这是一个常见的错误,根源于适配器的 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)

android listview android-arrayadapter

3
推荐指数
1
解决办法
5555
查看次数

AutoCompleteTextView 不适用于自定义 ArrayAdapter

我正在尝试实现一个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

3
推荐指数
1
解决办法
6838
查看次数