1. 程式人生 > >如何通過自定義Adapter獲取listview的position

如何通過自定義Adapter獲取listview的position

這個暑假學校安排一個月的實訓,內容就是,一個團隊開發一個app,相信對於有經驗的人來說是很簡單的事,但是我在此之前從來沒有接觸過Android,java基礎也接近於0,所以開發過程中遇到了很多問題,剛好專案經理要求我們寫寫技術總結,就把寫好的東西發到這裡,當作記錄吧。

1、 如何在前後端之間進行資料的傳輸
這是最初擺在我面前的一道難題,具體來說問題是這樣的:如何獲取到手機前端中的資料?如何將它傳送給後端?如何獲取後端資料庫反饋到前端的資訊?

第一個問題比較簡單,獲取前端的資料主要是來自TextView或者SP檔案,如何獲取TextView的資料就不需要說了,獲取Sp檔案中的資料則需要用到一些SharedPreference中的函式

SharedPreferences pref = getSharedPreferences("user_data",MODE_PRIVATE);

也是很簡單的。
對於第二個問題,方法應該是很多的,但是目前會用的只有老師教的方法,通過http協議作為通訊方式,用gson包裝資料,具體程式碼就像這樣的:

String path = "http://" + ip.ip + "/Hello_Web/loginServlet";
path = path + "?&account=" + account + "&password=" + passwd;
URL url = new URL(path);
HttpURLConnection
conn = (HttpURLConnection)url.openConnection();

這是實現登入模組的,其中path也就是http通訊的表單,表單格式一般是:


http://192.168.1.102:8080/Hello_Web/ loginServlet?+……

其中192.168.1.102:8080是我們後端的ip埠,也就是阿黃電腦的ip,Hello_Web/ loginServlet是後端處理登入事件的Servlet名稱,在”?”之後要寫的則是要傳輸的資料名稱和內容,比如”&account=”+account,&account是一個自己定義的名字,在後端會通過這個名稱來獲取資料,資料也就是account的值;如果要傳輸的是一批資料的話,通過這種方式一個一個填太麻煩了,那麼就要用到gson了,gson是json的一個變種吧,比如可以用gson封裝一個物件的資料,甚至是一個列表的資料,都是很方便的。

第三個問題的話,如果不牽涉到圖片,也是比較簡單的,如果想要知道圖片我們是怎麼處理的話,建議去看其他幾位組員的部落格。
因為後端在處理髮送反饋時,一般是通過outprint(data),data一般是一個字串,前端在接收這個資料時,需要一連串的處理,才能獲取到這個字串,比如:


URLConnection conn = url.openConnection;
InputStream stream = conn.getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
BufferedReader br = new BufferedReader(reader);
str = br.readLine();

通過這樣一系列的流操作,位元組轉換,最終獲取到的str也就是後端返回的資料,至於怎麼把這個返回的資料變成我們要顯示到前端的東西,又是另外一個問題了。

2、 如何刪除ListView中的某一項,之後更新該ListView並獲取到該項的資訊。
遇到這個問題是在要實現收藏列表的刪除時,收藏列表就是一個listview,在這個listview上有一個刪除button,要在點選這個button時刪除這個位置的listview,並且獲取到這個listview中店鋪的id等資訊,從而傳送給後端,將資料庫中資訊一併刪除。
首先,需要自定義一個atapter來適配這個listview,這個adapter需要有OnClickListener介面:

public class ContentAdapter extends BaseAdapter implements OnClickListener{}

並且需要有自定義介面,用於回撥按鈕點選事件到Activity :

private Callback mCallback;

    public interface Callback {
        public void click(View v);
    }

響應按鈕點選事件,呼叫子定義介面,並傳入View:

    @Override
    public void onClick(View v) {
        mCallback.click(v);
    }

在Activity中:


public class CollectStoreActivity extends Activity implements OnItemClickListener,Callback{}

要有CallBack的介面,同時在Activity中重寫click()方法:

 @Override
public void click(final View v) {

        final int position1 = (Integer)v.getTag();
        new AlertDialog.Builder(CollectStoreActivity.this).setTitle("提示資訊").setMessage("確認要取消收藏嗎?")
                .setCancelable(false).setPositiveButton("確認", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                System.out.println("----------------int the click: "+v.getTag());
                list2.remove(position1);
                contentAdapter.notifyDataSetChanged();
                lv.invalidate();
                if (list2.size()==0)
                {
                    collect_tv.setText("您當前沒有收藏店鋪");
                    collect_pic.setImageResource(R.mipmap.bg_empty);
                }
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        }).show();
}

在這裡的:

 list2.remove(position1);
 contentAdapter.notifyDataSetChanged();
 lv.invalidate();

就可以實現實時的刪除後更新listview,之後再將這個list2的內容寫入Sp檔案,與之前的資訊比較得出刪除的店鋪的id,重寫onBackPressed()方法,傳送給資料庫。

相關推薦

如何通過定義Adapter獲取listview的position

這個暑假學校安排一個月的實訓,內容就是,一個團隊開發一個app,相信對於有經驗的人來說是很簡單的事,但是我在此之前從來沒有接觸過Android,java基礎也接近於0,所以開發過程中遇到了很多問題,剛好專案經理要求我們寫寫技術總結,就把寫好的東西發到這裡,當作記錄吧。

通過定義 @CurrentUser 獲取當前登錄用戶

info req nat pub nbsp art att bool inter @CurrentUser 要用這個註釋,總共分為三步 1:第一 @Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTI

spring專案中 通過定義applicationContext工具類獲取到applicationContext上下文物件

spring專案在伺服器啟動的時候 spring容器中就已經被建立好了各種物件,在我們需要使用的時候可以進行呼叫. 工具類程式碼如下 import org.springframework.beans.BeansException; import org.springframewo

android:如何通過定義工程模板讓新建的工程都默認支持lambda表達式

wan tro idt ref height 代碼 spa span oid 首先參考這篇文章:自定義Android Studio工程模板,了解如何自定義模板然後結合我們上一篇文章 android: 在android studio中使用retrolambda的步驟的要點,修

玩轉angularJs——通過定義ng-model,不僅僅只是input可以有雙向綁定

spa ase write blur when mob ron lin for angularJs雙向綁定特性在開發中很方便很實用,但是由於ng-model一般只能掛在input上,因此我們需要自定義ng-model來在div等元素上使用該標簽。 自定義指令: 1

可復用的定義Adapter

text logs 存儲 group bili this resource list extend public abstract class MyAdapter<T> extends BaseAdapter { private ArrayList&

Asp.Net Core 通過定義中間件防止圖片盜鏈的實例(轉)

訪問 沒有 static padding task start leg 自我 header 一、原理 要實現防盜鏈,我們就必須先理解盜鏈的實現原理,提到防盜鏈的實現原理就不得不從HTTP協議說起,在HTTP協議中,有一個表頭字段叫referer,采用URL的格式來表示從哪兒

通過定義註解與aop統一存儲操作記錄

只需要 org 一段 連接 tostring 註解 element iso boot 模塊開發完成後,接到通知需要添加操作記錄功能,看著那一堆接口,如果一個方法一個方法的加,那真是太麻煩了。為了偷懶,就百度了一下,發現可以通過自定義註解和aop的形式來統一添加操作記錄,只需

excel2013如何通過定義排序方式來進行排序

資料 process html 技術 完整 通過 序列 解決辦法 需求 在實際中,我們肯定會有這麽一種需求,即按照自定義的順序來排序。解決辦法就是,我們自定義一個序列給Excel,然後讓Excel按照這個序列來進行排序。如圖 【解決方法,教程視頻資料如下】 本教程視頻資料來

scrapy通過定義類給爬取的url去重

之前我們是通過在parse函式裡設定集合來解決url去重的問題。 首先先在根目錄中建立一個新的duplication的py檔案,在from scrapy.dupefilter import RFPDupeFilter,在RFPDupeFilter原始碼中把BaseDupeFilter類複製到新建

python通過定義異常,提前退出方法

def spot(waitByTime30,waitByTime1): try: elm = waitByTime1.until(lambda x: x.find_element_by_name("captcha")) print(elm) exc

通過定義指令在Angular2中使用Echarts (實用)

原文出處:https://blog.csdn.net/idomyway/article/details/79658099 前言     echarts是第三方js庫,不是ts編寫,沒有型別定義,我們可以引入型別定義的庫@types,查詢是否有echarts,很高興其他人已

通過定義屬性,排他的原理實現列表的表頭和對應內容的切換

要點: 1.自定義屬性,可以用來存放類似於這個案例中索引的不是自帶的屬效能滿足的,通過setAttribute("自定義屬性名",值)來自定義一個屬性,切記不可直接通過this.自定義屬性來設定值    同時,獲取和移除自定義屬性,分別是getAttribute()和re

SpringBoot 通過定義註解實現AOP切面程式設計例項

一直心心念的想寫一篇關於AOP切面例項的博文,拖更了許久之後,今天終於著手下筆將其完成。 基礎概念 1、切面(Aspect) 首先要理解‘切’字,需要把物件想象成一個立方體,傳統的面向物件變成思維,類定義完成之後(封裝)。每次例項化一個物件,對類定義中的成員變數賦值,就相當於對這個立方體進行了一個定義,

通過定義函式進行字串或陣列進行排序

程式碼如下: <?php /*  * 函式名:customComp  * 說明:引數比較  */ function customComp($a,$b){ // 返回字串的首個字元的 ASCII 值     $a=ord($a);

基於springboot通過定義註解和AOP實現許可權驗證

這篇文章主要介紹自定義註解配合AOP的使用來完成一個簡單的許可權驗證的功能。 一、移入依賴 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin

如何通過定義域名方式訪問本地WEB應用

win 進入 文檔 程序 2.4 註冊 可執行 .exe 公網 自定義域名訪問本地WEB應用 本地安裝了WEB服務端,怎樣通過自定義域名方式實現從公網訪問本地WEB應用? 本文將介紹具體的實現步驟。 1. 準備工作 1.1 安裝並啟動WEB服務端 默認安裝的WEB端口是80

ssm框架中通過定義異常實現對事務的管理

什麼時候回滾事務? 在spring的事務管理中我們首先要明白這個問題,一般是在丟擲執行期異常的時候會進行事務的回滾。而spring的宣告式事務管理只接受執行期異常。 異常通常分為執行期異常和編譯期異常。 在java中常見的執行期異常有: NullPointerExcept

安卓ListView定義Adapter

list.xml <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_conte

使用CDN後配置nginx定義日誌獲取訪問使用者的真實IP

問題描述:         新上線了一個專案,架構如下(簡單畫的理解就好): 問題是:負載前面加上CDN後負載這裡無法獲取客戶的真實訪問IP,只能過去到CDN的IP地址; 問題解決: 修改nginx日誌新增:$HTTP_CDN_SRC_IP log_fo