标签: custom-adapter

无法使用自定义适配器在ListView中设置项目边距

我正在尝试为ListView中的项设置变量左边距.我在getView方法中的自定义适配器中出现此问题:

    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            Comment c = comments.get(position);
            convertView = inflater.inflate(R.layout.list_item, null);               
            (TextView)convertView.findViewById(R.id.story)).setText(c.message);


        }
            RelativeLayout.LayoutParams lp = new  RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
            lp.setMargins(0, c.getDepth() * 5, 0, 0);               
            convertView.setLayoutParams(lp);

        return convertView;
    }
Run Code Online (Sandbox Code Playgroud)

我们使用一些textViews来扩展list_item布局,这是一个RelativeLayout.然后我尝试使用RelativeLayout.LayoutParams设置边距.我得到了一个类强制转换异常,但普通的LayoutParams类型没有设置边距的方法.

设定保证金的最佳方法是什么?

这是错误

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1779)
at android.widget.ListView.makeAndAddView(ListView.java:1748)
at android.widget.ListView.fillDown(ListView.java:670)
at android.widget.ListView.fillFromTop(ListView.java:727)
at android.widget.ListView.layoutChildren(ListView.java:1598)
at android.widget.AbsListView.onLayout(AbsListView.java:1273)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1145)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
at android.os.Handler.dispatchMessage(Handler.java:99) …
Run Code Online (Sandbox Code Playgroud)

android android-listview custom-adapter

10
推荐指数
2
解决办法
9806
查看次数

使用自定义适配器选择/突出显示列表视图中的多个项目 - Android

我通过一个很好的教程,进行了一些更改,创建了一个自定义ListView,它允许我为ListView中的每一行显示多个图像.我想要做的是通过选择列表中的多个项目来突出显示,然后通过在我的选项菜单上选择一个选项,对所有这些列表项执行某种操作.但是,我似乎遇到的问题是我无法选择多个项目,即使我已经添加android:choiceMode="multipleChoice"到.xml文件中的ListView.我意识到这可以使用复选框或单选按钮完成,但我宁愿避免这种情况.我在下面附上了我的源代码.任何帮助,将不胜感激.最后,感谢http://custom-android-dn.blogspot.com/提供了一个很棒的教程.谢谢.

CustomlistviewActivity.java

package DucNguyen.example.customlistview;

public class CustomlistviewActivity extends Activity {

    private ListView listViewFootballLegend;
    private Context ctx;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_customlistview);        
        ctx=this;   
        List<FootballLegend> legendList= new ArrayList<FootballLegend>();
        legendList.add(new FootballLegend("Pele","October 23, 1940 (age 72)","pele","brazil"));
        legendList.add(new FootballLegend("Diego Maradona","October 30, 1960 (age 52)","maradona","argentina"));
        legendList.add(new FootballLegend("Johan Cruyff","April 25, 1947 (age 65)","cruyff","netherlands"));
        legendList.add(new FootballLegend("Franz Beckenbauer","September 11, 1945 (age 67)","beckenbauer","germany"));
        legendList.add(new FootballLegend("Michel Platini","June 21, 1955 (age 57)","platini","france"));
        legendList.add(new FootballLegend("Ronaldo De Lima","September 22, 1976 (age 36)","ronaldo","brazil"));

        listViewFootballLegend = ( ListView ) …
Run Code Online (Sandbox Code Playgroud)

java android android-listview custom-adapter

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

过滤自定义适配器IndexOutOfBoundsException

我是android的新手.

我的自定义适配器在过滤时导致异常

这是我的代码.private class DeptAdapter extends ArrayAdapter implements Filterable {

    private ArrayList<Dept> items;
    private ArrayList<Dept> mOriginalValues;

    public DeptAdapter(Context context, int textViewResourceId, ArrayList<Dept> items) {
            super(context, textViewResourceId, items);
            this.items = items;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;

        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.item_listview_2line, null);
        }
        Dept d = items.get(position);
        if (d != null) {
                TextView tt = (TextView) v.findViewById(R.id.toptext);
                TextView bt = (TextView) v.findViewById(R.id.bottomtext);
                if (tt …
Run Code Online (Sandbox Code Playgroud)

android filter custom-adapter

8
推荐指数
1
解决办法
2725
查看次数

如何从ListView中的自定义适配器获取数据?

这是我的问题:

我为我的ListView创建了一个自定义适配器,我从List中获取信息,我给了该适配器,以便让他实现我的ListView.他做的一切都很正确.现在我想实现一个OnItemClickListener并从中获取数据.但是在那个列表中我有4个TextViews ......

我该如何检索数据

我已经知道如何获得id和位置,因为我在Toast中显示它们.

非常感谢你的帮助 !

这是自定义适配器:

public class NextRdvAdapter extends ArrayAdapter<NextRdv> {
private List<NextRdv> listNextRdv = new ArrayList<NextRdv>(); 
private Context context; 

public NextRdvAdapter(List<NextRdv> nextRdvList, Context ctx) {
    super(ctx, R.layout.list_next_rdv, nextRdvList);
    this.listNextRdv = nextRdvList; 
    this.context = ctx;
} 

public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) { // This a new view we inflate the new layout 
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = inflater.inflate(R.layout.list_next_rdv, parent, false); 
        } // Now we …
Run Code Online (Sandbox Code Playgroud)

android listview android-listview custom-adapter

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

Android无限滚动列表视图

我想实现OnScrollListener在动态滚动到底部时加载更多数据.下面的代码给了我NullPointerException,但是当我声明时

  BusinessListDataAdapter adapter = new BusinessListDataAdapter(this,
            this.imgFetcher, this.layoutInflator, this.businesses);
Run Code Online (Sandbox Code Playgroud)

在里面setBusiness,它没有显示任何错误,工作正常.问题是,当我滚动到页面底部时,它list view用新数据替换当前数据,但我想要的是无限滚动,同时附加新数据而不是替换,以便我可以查看第一个数据向上滚动

import java.util.ArrayList;

import com.sp.sodhpuch.adapters.BusinessListDataAdapter;
import com.sp.sodhpuch.data.BusinessListData;
import com.sp.sodhpuch.tasks.BusinessListApiTask;
import com.sp.sodhpuch.tasks.BusinessListIconTask;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListResultActivity extends Activity {

    private ArrayList<BusinessListData> businesses;
    private ListView businessList;
    private LayoutInflater layoutInflator;
    private BusinessListIconTask imgFetcher;
    BusinessListDataAdapter adapter = new BusinessListDataAdapter(this,
            this.imgFetcher, this.layoutInflator, this.businesses);

    @SuppressWarnings("unchecked") …
Run Code Online (Sandbox Code Playgroud)

android infinite-scroll custom-adapter onscrolllistener

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

在自定义ListView适配器中按项目时突出显示效果

每次单击Android中的视图时都会产生系统视觉效果.在棒棒糖中,这是涟漪效应.当我创建ListView并将其与普通的ArrayAdapter相关联时,会出现此效果.现在我已经添加了自定义ListView,这种效果会丢失.

现在,我试图找出问题所在,并且由于使用相同的列表项布局与默认适配器工作得很好,我会说问题出在我的自定义适配器上.

我已经看到很多与这种情况相关的解决方案,只是实现了涟漪效应调用一些drawables; 这不是我想要做的.涟漪效应只是因为我在Android 5上运行应用程序,现在我要做的是在点击它们时为我的项目设置默认的系统高亮效果.

以下是我的自定义适配器的(希望)相关部分:

public class CustomCardSetsAdapter extends BaseAdapter {
    List<Card> totalList;
    ArrayList<Boolean> hiddenItems;
    ListView parentLV;
    Integer curPosition = -1;

    public static int selectedRowIndex;

    public CustomCardSetsAdapter(CardSets cardList, ListView parentListView)
    {
        this.parentLV = parentListView;
        assignSetValues(cardList);

        totalList =      cardList.getBlackrockMountain();
        totalList.addAll(cardList.getClassic());
        totalList.addAll(cardList.getCurseofNaxxramas());
        totalList.addAll(cardList.getGoblinsvsGnomes());

        Collections.sort(totalList,
                new Comparator<Card>() {
                    public int compare(Card f1, Card f2) {
                        return f1.toString().compareTo(f2.toString());
                    }
                });

        hiddenItems = new ArrayList<>();

        for (int i = 0; i < totalList.size(); i++) {
            if(!totalList.get(i).getCollectible())
                hiddenItems.add(true);
            else
                hiddenItems.add(false);
        }
    }

    @Override
    public int …
Run Code Online (Sandbox Code Playgroud)

android listview custom-adapter

7
推荐指数
1
解决办法
3991
查看次数

从画廊视图中选择多个图像

我想创建一个图库视图,我想在其中使用橙色矩形框选择多个图像.

它应该类似于以下内容:

画廊视图

屏幕看起来像http://i.imgur.com/qAO0Q.jpg

android android-gallery custom-adapter

6
推荐指数
2
解决办法
1347
查看次数

listview行中的TextView在Android中滚动时显示重复值?

我正在使用ListView的自定义适配器,其中我有一个TextView和一个Spinner.从Spinner中选择值后,将该值复制到相应行列表的TextView之后.

问题是,由于我在ListView中有超过40个元素,当我选择第一个微调器并将值设置为相应的TextView时,在滚动时,在第10行TextView中可以看到相同的值.

在滚动时将值从第1个TextView复制到第10个TextView.

以下是我使用的代码:

public class AppListAdapter extends BaseAdapter {

    private LayoutInflater mInflater;
    private List<App> mApps = Constants.list;
    private Context _activity;
    ArrayList<String> months=null;
    ArrayAdapter<String> dataAdapter =null;
    int spinerposition;
    int viewposition;

    int temp=0;
    private int screenWidth;


    /**
     * Constructor.
     * 
     * @param context the application context which is needed for the layout inflater
     * @param screenWidth 
     */
    public AppListAdapter(Context context, int screenWidth) {
        // Cache the LayoutInflate to avoid asking for a new one each time.
        mInflater = LayoutInflater.from(context);
        this._activity=context;
        this.screenWidth …
Run Code Online (Sandbox Code Playgroud)

android listview custom-adapter

6
推荐指数
1
解决办法
8904
查看次数

使用自定义适配器实现可扩展ListView

我想为Expandable ListView实现一个自定义适配器,它包含一个ImageView和2个TextViews.我已经使用Array Adapter成功实现了Simple Expandable ListView.必须在以下两个类中进行哪些更改(第一个类是Adapter类,第二个类是显示可扩展ListView的Activity)以实现所需的自定义布局?以下是需要更改的类:

以下是适配器类:

package com.example.travelplanner;

import java.util.List;
import java.util.Map;

import android.R.string;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.sax.StartElementListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter implements OnClickListener{

    private Activity context;
    private Map<String, List<String>> itemcollections;
    private List<String> item;
    TextView childtv;
    Button btn_cat_explore;
    public ExpandableListAdapter(Activity context, List<String> item_names, Map<String, List<String>> collections){
        this.context = context;
        this.item = item_names;
        this.itemcollections = collections;
    }
    @Override
    public Object …
Run Code Online (Sandbox Code Playgroud)

android expandablelistview custom-adapter

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

Android:无法使用CustomAdapter刷新Listview

我需要用新数据刷新列表视图.下面这个代码是用于获取数据OnCreateView是在FragmentActivity在第一时间.

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
        val url = "something"

        val request_queue = Volley.newRequestQueue(this.context)
        val stringRequest = StringRequest(Request.Method.GET, url,
                Response.Listener<String> { response ->
                    val pending_job = Gson().fromJson<ArrayList<HashMap<String, String>>>(
                            response.toString(),
                            object : TypeToken<ArrayList<HashMap<String, String>>>() {}.type
                    )
                    this@PlaceholderFragment.showList(rootView, R.id.pending_job_list, pending_job)

                    pending_job_list_layout.setOnRefreshListener(this)

                    request_queue.stop()
                }, Response.ErrorListener { error ->
            if (error.networkResponse != null) {
                Toast.makeText(this.context, error.networkResponse.statusCode.toString(), Toast.LENGTH_SHORT).show()
            }
            request_queue.stop()
        })
        request_queue.add(stringRequest)
}
Run Code Online (Sandbox Code Playgroud)

showList 是设置CustomAdapter的功能,即

fun showList(rootView: View, tab_id: Int, job_list: ArrayList<HashMap<String, String>>) {

    // custom …
Run Code Online (Sandbox Code Playgroud)

android custom-adapter kotlin android-listfragment android-volley

6
推荐指数
1
解决办法
205
查看次数