我正在尝试为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) 我通过一个很好的教程,进行了一些更改,创建了一个自定义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) 我是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) 这是我的问题:
我为我的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) 我想实现OnScrollListener在动态滚动到底部时加载更多数据.下面的代码给了我NullPointerException,但是当我声明时
Run Code Online (Sandbox Code Playgroud)BusinessListDataAdapter adapter = new BusinessListDataAdapter(this, this.imgFetcher, this.layoutInflator, this.businesses);
在里面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中的视图时都会产生系统视觉效果.在棒棒糖中,这是涟漪效应.当我创建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) 我正在使用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) 我想为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) 我需要用新数据刷新列表视图.下面这个代码是用于获取数据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