真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android列表,android列表刷新

Android多級(jí)列表

將課本的章節(jié)以多級(jí)列表的形式顯示。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、做網(wǎng)站、曲周網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、曲周網(wǎng)絡(luò)營(yíng)銷、曲周企業(yè)策劃、曲周品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供曲周建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

1.嵌套多級(jí) RecyclerView,兩級(jí)列表還好說(shuō),每多一級(jí)都是一場(chǎng)噩夢(mèng)。

2.ExpandableListView?但是ExpandableListView只支持兩級(jí),不滿足需求。

3.一個(gè)RecyclerView或者 ListView 來(lái)實(shí)現(xiàn),每一級(jí)節(jié)點(diǎn)的要素有:當(dāng)前節(jié)點(diǎn)id、父級(jí)節(jié)點(diǎn)id即pid,顯示的內(nèi)容。

控制父子之間聯(lián)動(dòng)的選中與取消狀態(tài),只需調(diào)用setChecked方法既可,注意如果在setOnCheckedChangeListener中處理會(huì)有問(wèn)題:因?yàn)槿绻庸?jié)點(diǎn)/父節(jié)點(diǎn)選中或者取消需要刷新頁(yè)面,而刷新頁(yè)面又會(huì)觸發(fā)viewHolder.cb.setChecked(true/false);的判斷從而又會(huì)進(jìn)入setOnCheckedChangeListener,會(huì)導(dǎo)致如果父節(jié)點(diǎn)選中某些子節(jié)點(diǎn)取消不了的情況。

通過(guò)一個(gè)ListView來(lái)展示所有數(shù)據(jù),每一級(jí)內(nèi)容的顯示根據(jù)當(dāng)前展示數(shù)據(jù)的等級(jí)縮進(jìn)一定的padding值,讓我們看起來(lái)有縮進(jìn)效果。

使用過(guò)程中感覺(jué)不是很舒服的地方在于最終用于顯示在界面實(shí)體Bean并不是我們傳進(jìn)去的數(shù)據(jù),而是經(jīng)過(guò)轉(zhuǎn)化并且過(guò)濾的數(shù)據(jù),這樣最直接的影響就是在我新增數(shù)據(jù)的數(shù)據(jù)之后,拿著Adapter來(lái)刷新的時(shí)候,并沒(méi)有任何效果。因?yàn)槲覀儧](méi)有將后面新加的數(shù)據(jù)進(jìn)行轉(zhuǎn)化。

而我們?nèi)绾文茉诓桓淖冊(cè)袛?shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,添加我們的新內(nèi)容,并保持原有的選中或者展開(kāi)正常呢?我的想法是這樣的,如果可以直接給它傳入轉(zhuǎn)化后的Node節(jié)點(diǎn)類型數(shù)據(jù)就好了,我想到了繼承,讓實(shí)體類去繼承基類Node,但一旦繼承Node則意味著實(shí)體類就不能再繼承其他類了,感覺(jué)不是很靈活,而且也影響了實(shí)體類本身的結(jié)構(gòu)。后來(lái)想到了包裝設(shè)計(jì)模式的一些東西,那我就在實(shí)體類外再包上一層,也就是將實(shí)體類傳給Node,最終我們使用的還是Node,但也可以用node.bean很輕松的取出實(shí)體類做其他操作,并且實(shí)體類本身的結(jié)構(gòu)并沒(méi)有被破壞。

在此基礎(chǔ)上,因?yàn)槲覀兊腘ode不需要轉(zhuǎn)化重新創(chuàng)建,那么它就可以保存一些狀態(tài)比如展開(kāi)、選中等等,而在新加入數(shù)據(jù)時(shí)只需標(biāo)記下新加入的數(shù)據(jù),只需對(duì)新加入的數(shù)據(jù)進(jìn)行初始化狀態(tài),已有老數(shù)據(jù)不進(jìn)行狀態(tài)改變:

項(xiàng)目地址:

原文連接:

如何獲得Android手機(jī)的軟件安裝列表

packageManager.getInstalledApplications()返回一個(gè)列表都是安裝在設(shè)備上的應(yīng)用程序包。如果我們把 flag GET_UNINSTALLED_PACKAGES設(shè)定,一個(gè)列表中的所有應(yīng)用,包括那些設(shè)置為dont_delete_data(部分已安裝的應(yīng)用程序的數(shù)據(jù)目錄)將返回。

你可以看到附件中的截圖,我們將創(chuàng)建一個(gè)列表顯示所有已安裝的應(yīng)用程序。

snippet_list_row.xml--------------------這個(gè)布局是由ListView適配器用于表示應(yīng)用程序的細(xì)節(jié)。它顯示應(yīng)用程序圖標(biāo)、應(yīng)用程序名稱和應(yīng)用程序包。

?xml version="1.0" encoding="utf-8"?LinearLayout xmlns:android="" android:layout_width="fill_parent" android:layout_height="wrap_content" ImageView android:id="@+id/app_icon" android:layout_width="50dp" android:layout_height="50dp" android:padding="3dp" android:scaleType="centerCrop" / LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dp" TextView android:id="@+id/app_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" / TextView android:id="@+id/app_paackage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" / /LinearLayout/LinearLayout

AllAppsActivity.java ##這是用于初始化和列表已安裝的應(yīng)用程序的主要應(yīng)用程序類。從packagemanage得到應(yīng)用細(xì)節(jié)列表是一個(gè)耗時(shí)的任務(wù),我們將在AsyncTask里面做。同時(shí),類使用自定義適配器“自定義listview applicationadapter”。 package com.javatechig.listapps;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.ActivityNotFoundException;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.net.Uri;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.ListView;import android.widget.Toast;public class AllAppsActivity extends ListActivity { private PackageManager packageManager = null; private ListApplicationInfo applist = null; private ApplicationAdapter listadaptor = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); packageManager = getPackageManager(); new LoadApplications().execute(); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { boolean result = true; switch (item.getItemId()) { case R.id.menu_about: { displayAboutDialog(); break; } default: { result = super.onOptionsItemSelected(item); break; } } return result; } private void displayAboutDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getString(R.string.about_title)); builder.setMessage(getString(R.string.about_desc)); builder.setPositiveButton("Know More", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("")); startActivity(browserIntent); dialog.cancel(); } }); builder.setNegativeButton("No Thanks!", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.show(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ApplicationInfo app = applist.get(position); try { Intent intent = packageManager .getLaunchIntentForPackage(app.packageName); if (null != intent) { startActivity(intent); } } catch (ActivityNotFoundException e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(AllAppsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } } private ListApplicationInfo checkForLaunchIntent(ListApplicationInfo list) { ArrayListApplicationInfo applist = new ArrayListApplicationInfo(); for (ApplicationInfo info : list) { try { if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { applist.add(info); } } catch (Exception e) { e.printStackTrace(); } } return applist; } private class LoadApplications extends AsyncTaskVoid, Void, Void { private ProgressDialog progress = null; @Override protected Void doInBackground(Void... params) { applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); listadaptor = new ApplicationAdapter(AllAppsActivity.this, R.layout.snippet_list_row, applist); return null; } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPostExecute(Void result) { setListAdapter(listadaptor); progress.dismiss(); super.onPostExecute(result); } @Override protected void onPreExecute() { progress = ProgressDialog.show(AllAppsActivity.this, null, "Loading application info..."); super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } }}

package com.javatechig.listapps;import java.util.List;import android.content.Context;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class ApplicationAdapter extends ArrayAdapterApplicationInfo { private ListApplicationInfo appsList = null; private Context context; private PackageManager packageManager; public ApplicationAdapter(Context context, int textViewResourceId, ListApplicationInfo appsList) { super(context, textViewResourceId, appsList); this.context = context; this.appsList = appsList; packageManager = context.getPackageManager(); } @Override public int getCount() { return ((null != appsList) ? appsList.size() : 0); } @Override public ApplicationInfo getItem(int position) { return ((null != appsList) ? appsList.get(position) : null); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (null == view) { LayoutInflater layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater.inflate(R.layout.snippet_list_row, null); } ApplicationInfo applicationInfo = appsList.get(position); if (null != applicationInfo) { TextView appName = (TextView) view.findViewById(R.id.app_name); TextView packageName = (TextView) view.findViewById(R.id.app_paackage); ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); appName.setText(applicationInfo.loadLabel(packageManager)); packageName.setText(applicationInfo.packageName); iconview.setImageDrawable(applicationInfo.loadIcon(packageManager)); } return view; }};

Android 下拉列表Spinner

在UI中經(jīng)常會(huì)使用到下拉列表,在android控件中有兩個(gè)下拉列表控件:

在xml中添加控件的使用:

主題:

這些都沒(méi)有達(dá)到我要的效果:

android:entries // 傳入的是values文件夾下的arrayx.xml內(nèi)的數(shù)據(jù)

android:spinnerMode //顯示模式有popmenu和dialog兩種

android:prompt //當(dāng)顯示模式為dialog時(shí)生效,作用為顯示dialog的標(biāo)題內(nèi)容


標(biāo)題名稱:android列表,android列表刷新
標(biāo)題URL:http://weahome.cn/article/dssopgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部