我有兴趣创建一个通用的BaseAdapter,它将应用于任何具有任何list_item的ListView.它将为list_view设置item_row.
public class GenericAdapter extends BaseAdapter
{
Context context;
ArrayList<HashMap<String, String>> list;
LayoutInflater inflater;
public GenericAdapter (Context context, ArrayList<HashMap<String, String>> list)
{
this.context = context;
this.list = list;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position)
{
return list.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = convertView;
if(view == null)
{
view = inflater.inflate(R.layout.item_of_any_list, …Run Code Online (Sandbox Code Playgroud) 好吧,这个主题已经并且仍然存在很多争论,我已经阅读了许多教程,提示并看到了有关它的讨论.但是当我达到某些行的复杂性时,我仍然遇到了为ListView实现自定义BaseAdapter的问题.所以我基本上拥有的是通过解析来自网络的xml获得的一些实体.另外我获取一些图像等等,所有这些都是在AsyncTask中完成的.我在getView()方法中使用性能优化的ViewHandler方法,并按照每个人的建议重用convertView.即我希望我正在使用ListView,因为它只是显示单个ImageView和两个TextViews,它们使用SpannableStringBuilder进行样式化(我不使用任何HTML.fromHTML)它真的很好用.
现在来了.每当我使用多个小型ImageView,一个Button以及一些使用SpannableStringBuilder进行不同样式设置的TextView扩展行布局时,我都会获得停止滚动的性能.该行包含一个RelativeLayout作为父级,所有其他元素都使用布局参数排列,因此我的布局不能使该行更简单.我必须承认,我从未见过任何包含许多UI元素的行的ListView实现示例.
但是,当我在ScrollView中使用TableLayout并使用AsyncTask(通过onProgressUpdate()稳定添加新行)手动填充它时,即使其中有数百行,它也表现得非常流畅.如果滚动到列表末尾,添加新行时会稍微绊倒一下.否则它比ListView更平滑,它在滚动时总是绊倒.
当ListView不想表现好时,有什么建议吗?我应该继续使用TableLayout方法还是建议使用ListView来优化性能?
这是我的适配器的实现:
protected class BlogsSeparatorAdapter extends BaseAdapter {
private LayoutInflater inflater;
private final int SEPERATOR = 0;
private final int BLOGELEMENT = 1;
public BlogsSeparatorAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return blogs.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
int type = BLOGELEMENT;
if (position == 0) {
type = SEPERATOR;
} else if …Run Code Online (Sandbox Code Playgroud) performance android tablelayout android-listview baseadapter
当我单击列表视图中的按钮时,我有显示Toast消息的问题.问题是我通过BaseAdapter扩展的自定义类我有一个名为GetView的方法我想显示来自该特定消息的Toast消息
以下是我的Listview Row Xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/tools"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:context=".HomeActivity" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow
android:id="@+id/tableRow_laugh"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:ignore="UselessParent" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<TableRow
android:id="@+id/tableRow_Header_laugh"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#818085" >
<RelativeLayout
android:id="@+id/relative_header"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:background="#818085" >
<ImageView
android:id="@+id/UserIconPic_laugh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_weight="0.4"
android:src="@drawable/ic_launcher"
app:ignore="ObsoleteLayoutParam,ContentDescription" />
<Button
android:id="@+id/btn_Vote_laugh"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_weight=".4"
android:text="VOTE"
app:ignore="ObsoleteLayoutParam,HardcodedText" />
<TextView
android:id="@+id/txt_number_of_vote_laugh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btn_Vote_laugh"
android:layout_alignBottom="@+id/btn_Vote_laugh"
android:layout_toRightOf="@+id/UserIconPic_laugh"
android:layout_weight=".4"
android:textAppearance="?android:attr/textAppearanceMedium"
app:ignore="ObsoleteLayoutParam,HardcodedText" />
</RelativeLayout>
</TableRow>
<TableRow
android:id="@+id/tableRow_MainText_laugh"
android:layout_width="wrap_content" …Run Code Online (Sandbox Code Playgroud) android listview android-layout baseadapter listview-adapter
我正在使用baseadapter创建一个自定义列表视图.我的列表中有10个列表项.我的问题是afetr 6项,前4个是重复.我只是在getview.it中打印的位置值给出0,1,2,3 ,4,5,6,7,8,9,0,1,2,3.我的代码如下.
提前
public class ProductListAdapter extends BaseAdapter implements OnClickListener{
/*
* developer :sanu
* date :10-4-2013
* time :3.34 pm
*/
public View row;
private String[] productName;
private String[] producttype;
private String[] priceRangeFrom;
private String[] priceRangeTo;
private String[] productImage;
private Activity activity;
private static LayoutInflater inflater=null;
static String posClicked;
ViewHolder holder;
Integer height1;
Integer width1;
Typeface tf;
Integer FirmaCount;
public ImageLoader imageLoader;
public ProductListAdapter(Activity a,String[] name,String[] type,String[] price_from,String[] price_to,String[] image,Typeface tf) {
activity = a;
productName = name; …Run Code Online (Sandbox Code Playgroud) 我创建了一个显示字母表字母的gridview.我使用自定义BaseAdapter使用字符串数组填充gridview.
我想要做的是能够获得被点击的单元格的值(字母).为了验证它是否有效,我创建了一个TextView,我希望当用户点击一个项目(单元格)时,使用所选单元格的值设置TextView的文本
我做了一个不起作用的尝试.这是我的代码:
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame" >
<GridView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myGridView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:numColumns="7" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/feedback"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
cell.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/grid_item"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="05"
android:textSize="20sp"
android:enabled="true"
android:clickable="true">
</Button>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
主要活动
public class MainActivity extends Activity {
private TextView text;
private GridView gridView;
private final String[] items = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "I", …Run Code Online (Sandbox Code Playgroud) 我的问题很简单,但我的代码不起作用.我想将ParseQuery的结果排序到ParseQueryAdapter中,然后再将其显示到ListView中.
products.addOnQueryLoadListener(new ParseQueryAdapter.OnQueryLoadListener<Product>() {
@Override
public void onLoaded(List<Product> data, Exception e) {
Collections.sort(data, LastDealComparator);
products.notifyDataSetInvalidated();
}
@Override
public void onLoading() {
}
});
Run Code Online (Sandbox Code Playgroud)
我检查调试器数据是按比较器排序的......但是没有更新到ParseQueryAdapter ... notifyDataSetInvalidated什么都不做.
有关信息,最初我的问题是对指针字段排序查询:
query.orderByDescending("deal.date");
Run Code Online (Sandbox Code Playgroud)
但那也不行......所以我写了一个手动排序.
我正在扩展BaseAdapter以创建自定义列表视图行.我有上下文菜单,每当用户持有该行时会打开,并提示他是否要删除它.但是我该如何删除该行?hashmap只是测试数据.
private MyListAdapter myListAdapter;
private ArrayList<HashMap<String, String>> items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
items = new ArrayList<HashMap<String,String>>();
HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("date", "10/09/2011");
map1.put("distance", "309 km");
map1.put("duration", "1t 45min");
items.add(map1);
myListAdapter = new MyListAdapter(this, items);
setListAdapter(myListAdapter);
getListView().setOnCreateContextMenuListener(this);
}
private class MyListAdapter extends BaseAdapter {
private Context context;
private ArrayList<HashMap<String, String>> items;
public MyListAdapter(Context context, ArrayList<HashMap<String, String>> items) {
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我怎样才能插入overridePendingTransition一个GridView`适配器?这种方式不起作用,没有过渡开始工作完美
bt.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
final String selectedPad = Drum.pads[position];
Intent modPad = new Intent(v.getContext(), ModifyPad.class);
modPad.putExtra("pad", selectedPad);
context.startActivity(modPad);
overridePendingTransition(R.anim.exit_slid_in, R.anim.exit_slid_out);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我已经阅读过这篇文章:
android启动适配器中的Activity(转换动机方向问题)和注释相关,但我不知道怎么通过Activity了Adapter.有帮助吗?
我的关键问题是做lv_apps.setAdapter(_adapter)TWICE是我的应用程序崩溃的原因.(基本上,当我第二次调用populateListView_trial()时,应用程序崩溃 - 并且违规行是lv_apps.setAdapter(_adapter)
Stacktrace位于函数之下
private void populateListView_trial() {
blockedApps = loadArrayBlockedApps();
if(isTimerRunning()) {
blockedApps = loadArrayBlockedApps();
temp_blockedList = new ArrayAdapter<String>(
MainActivityCircularSeekbar.this,
android.R.layout.simple_list_item_1, blockedApps);
} else {
holder = new ArrayList<Datamodel>();
for(Map.Entry<String, String> entry : list_installedApps.entrySet()) {
Datamodel _appdata = new Datamodel();
_appdata.setAppname(entry.getKey());
_appdata.setSelected(true);
try {
_appdata.setAppIcon(getIconFromPackageName(entry.getValue(), this));
} catch (Exception e) {
e.printStackTrace();
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
holder.add(_appdata);
}
_adapter = new MyAdapter(getApplicationContext(), holder);
try {
lv_apps.setAdapter(_adapter);
} catch (Exception e) …Run Code Online (Sandbox Code Playgroud) android listview android-arrayadapter android-listview baseadapter
我正在使用Listview并设置多个项目,每个项目都有喜欢,分享和评论选项.其实我有获取项目编号以及还setText的TextView,它的成功.但是无法在特定项目的Like Button Click事件上获得Item Id.如何在每一个项目获取项目标识Listview的ButtonClick事件?
MyAdapter类的演示:
public class Adapter1 extends BaseAdapter implements OnClickListener {
public ArrayList<HashMap<String, String>> arr = null;
Context context = null;
LayoutInflater layoutInflater = null;
HashMap<String, String> getData = new HashMap<String, String>();
String urlLike = null;
TextView strId = null;
public NewsFeedAdapter(Context context,
ArrayList<HashMap<String, String>> arr) {
this.context = context;
this.arr= arr;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int …Run Code Online (Sandbox Code Playgroud) baseadapter ×10
android ×9
listview ×4
adapter ×1
gridview ×1
java ×1
overriding ×1
performance ×1
sorting ×1
tablelayout ×1
transition ×1
view ×1