当前位置: 首页 > 面试题库 >

Android应用程序中的动态ListView

鱼征
2023-03-14
问题内容

是否有一个可行的示例演示了如何在ListView中动态附加行?例如:

  1. 您正在从不同的域中提取RSS feed
  2. 然后在ListView中显示前10个项目(当您在后台运行其他线程时,继续提取提要)
  3. 您滚动并到达列表的底部,然后单击按钮以查看更多项目
  4. 然后,ListView将附加附加的10个项目,现在总共有20个项目。

任何建议如何做到这一点?

尼古拉斯


问题答案:

要将新项动态添加到列表中,您必须从ListActivity获取适配器类,并且只需添加新元素即可。将项目直接添加到适配器时,会自动为您调用notifyDataSetChanged-
并且视图会自动更新。

您还可以提供自己的适配器(扩展ArrayAdapter),并使用List参数覆盖构造函数。您可以像使用适配器一样使用此列表,但是在这种情况下,您必须自己调用adapter.notifyDataSetChanged()-刷新视图。
请看下面的例子:

public class CustomList extends ListActivity {
private LayoutInflater mInflater;
private Vector<RowData> data;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    data = new Vector<RowData>();
    RowData rd = new RowData("item1", "description1");
    data.add(rd);
    rd = new RowData("item2", "description2");
    data.add(rd);
    rd = new RowData("item2", "description3");
    data.add(rd);

    CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.item, data);
    setListAdapter(adapter);        
    getListView().setTextFilterEnabled(true);
}


public void onListItemClick(ListView parent, View v, int position, long id) {
    CustomAdapter adapter = (CustomAdapter) parent.getAdapter();
    RowData row = adapter.getItem(position);        
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(row.mItem); 
    builder.setMessage(row.mDescription + " -> " + position );
    builder.setPositiveButton("ok", null);
    builder.show();
}

/**
 * Data type used for custom adapter. Single item of the adapter.      
 */
private class RowData {
    protected String mItem;
    protected String mDescription;

    RowData(String item, String description){
        mItem = item;
        mDescription = description;         
    }

    @Override
    public String toString() {
        return mItem + " " +  mDescription;
    }
}

private class CustomAdapter extends ArrayAdapter<RowData> {

    public CustomAdapter(Context context, int resource,
            int textViewResourceId, List<RowData> objects) {
        super(context, resource, textViewResourceId, objects);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        //widgets displayed by each item in your list
        TextView item = null;
        TextView description = null;

        //data from your adapter
        RowData rowData= getItem(position);


        //we want to reuse already constructed row views...
        if(null == convertView){
            convertView = mInflater.inflate(R.layout.custom_row, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }
        // 
        holder = (ViewHolder) convertView.getTag();
        item = holder.getItem();
        item.setText(rowData.mItem);

        description = holder.getDescription();      
        description.setText(rowData.mDescription);

        return convertView;
    }
}

/**
 * Wrapper for row data.
 *
 */
private class ViewHolder {      
    private View mRow;
    private TextView description = null;
    private TextView item = null;

    public ViewHolder(View row) {
        mRow = row;
    }

    public TextView getDescription() {
        if(null == description){
            description = (TextView) mRow.findViewById(R.id.description);
        }
        return description;
    }

    public TextView getItem() {
        if(null == item){
            item = (TextView) mRow.findViewById(R.id.item);
        }
        return item;
    }       
}

}

您可以扩展上面的示例并添加“更多”按钮-只需将新项目添加到适配器(或矢量)即可。
问候!



 类似资料:
  • 我不希望我的应用程序要求pin后,用户采取了一张照片,所以我需要检测去相机活动不是背景状态。我要做什么? 注:1。它在ios 2上工作得很好。我尝试react native AppState在Android上没有“inactive”状态,但它不工作(这可能是因为我的应用程序usr react-native-navigation和MainActivity是extend SplashActivity)

  • 我想知道是否有可能在android应用程序中动态创建UI元素,而不使用xml或设计?元素的数量和类型将根据我从json数组中获得的需求而有所不同。那么,我是否可以在activityClass文件中创建按钮、文本视图等,而不在xml文件中创建它们?? 如果是,那么它会有多复杂?你能提供一个例子吗? 此外,是否有任何android库可供我使用,可以根据字段的类型和数量为我动态创建字段作为输入?

  • 遵循此官方教程,创建一个干净的项目https://developers.google.com/ar/develop/unity/quickstart-android对于在Android中构建和运行ARCore应用程序,示例场景HelloAR尚未启动。 游戏视图中的即时预览也不起作用,显示的是白色屏幕而不是相机渲染。 我的Unity版本是2019.1.10f1,ARCore SDK版本是1.10.0

  • 有人能给我解释一下这个LogCat输出以及如何解决它吗?我用手机(三星Galaxy Nexus)测试我的Android应用程序,就这样;系统强制拘留并将此打印在日志中...

  • 我明白了,我必须提到Proguard属性文件中的外部库。我该怎么提才是问题所在。 请查看我的proguard文件

  • 问题内容: 我将使用flask创建一个Web应用程序,该应用程序的一部分将涉及一个子域(例如,user1.appname.org)。 我不确定如何在Flask配置中动态创建这些子域,或者如何将它们部署到生产服务器。 最好的方法是什么? 问题答案: Flask的所有路由构造都支持关键字参数(这包括对路由变量的支持)。