2016-12-15 59 views
0

我在安卓
新的我的應用程序的結構包括:
activity_main.xml中:如何獲得行的值在列表視圖中的Android

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.reyhane.myapplication.MainActivity"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</android.support.design.widget.CoordinatorLayout> 

cell.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layoutDirection="rtl"> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TextView 
      android:id="@+id/nationalCode" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="2" 
      android:layout_marginLeft="8dp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="2" 
      android:layout_marginLeft="8dp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/lastName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="2" 
      android:layout_marginLeft="8dp" 
      android:textStyle="bold" /> 

     <Button 
      android:id="@+id/delete_btn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_column="2" 
      android:text="حذف" /> 

    </TableRow> 

</TableLayout> 

MainActivity.java

package com.example.reyhane.myapplication; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Gravity; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.AdapterView; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.PopupWindow; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class MainActivity extends Activity { 

    public ListView list; 
    public ArrayList<Person> countries = new ArrayList<Person>(); 
    public ListAdapter adapter; 

    public void fillPerson(String nationalCode) { 
     Person person = new Person(); 
     person.setNationalCode(nationalCode); 
     person.setName("reza"); 
     person.setLastName("hghgh"); 
     person.setPhone("231345"); 
     countries.add(person); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     fillPerson("6768767"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     list = (ListView) findViewById(R.id.list); 
     adapter = new ListAdapter(this); 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
       Object o = list.getItemAtPosition(position); 
       Person person = (Person) o; 
       openAddPersonActivity(person.getNationalCode()); 
      } 
     }); 
    } 

    public void openAddPersonActivity(String nationalCode) { 
     Intent i = new Intent(MainActivity.this, AddPerson.class); 
     if (nationalCode != null) 
      i.putExtra("nationalCode", nationalCode); 
     startActivity(i); 
    } 

} 

ListAdapter.java

package com.example.reyhane.myapplication; 

import android.content.Context; 
import android.content.Intent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TableLayout; 
import android.widget.TextView; 

/** 
* Created by reyhane on 11/24/16. 
*/ 

public class ListAdapter extends BaseAdapter { 
    MainActivity mainActivity; 

    ListAdapter(MainActivity mainActivity) { 
     this.mainActivity = mainActivity; 
    } 

    @Override 
    public int getCount() { 
     return mainActivity.countries.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    static class ViewHolderItem { 
     TextView nationalCode; 
     TextView name; 
     TextView lastName; 
     TextView phone; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolderItem holder = new ViewHolderItem(); 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.cell, null); 

      holder.nationalCode = (TextView) convertView.findViewById(R.id.nationalCode); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      holder.lastName = (TextView) convertView.findViewById(R.id.lastName); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolderItem) convertView.getTag(); 
     } 

     Button deleteBtn = (Button) convertView.findViewById(R.id.delete_btn); 
     holder.nationalCode.setText(this.mainActivity.countries.get(position).getNationalCode()); 
     holder.name.setText(this.mainActivity.countries.get(position).getName()); 
     holder.lastName.setText(this.mainActivity.countries.get(position).getLastName()); 

     deleteBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //do something 
       mainActivity.countries.remove(position); //or some other task 
       notifyDataSetChanged(); 
      } 
     }); 

     return convertView; 
    } 
} 

我的問題:
正如你在我的應用程序中看到,我在列表視圖的人名單。 在這個表格中,我添加人員並刪除並編輯它。
我可以刪除listview中的每條記錄,但是我無法獲得listview中每個reacord的人的nationalCode值,以便通過這個nationalcode從數據庫中獲取人員並對其進行編輯。
我該怎麼辦?
請幫我

+0

做到這一點'Toast.makeText(MainActivity.this, 「國家代碼是:」 +列表。 get(position).getNationalCode(),Toast.LENGTH_SHORT).show();'這就是你應該如何獲得國家代碼。 – 2016-12-15 08:15:12

回答

1
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
      { 
       @Override 
       public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) 
       { 
        String nationalcode = (String) ((TextView) v.findViewById(R.id.nationalcode)).getText(); 
        Toast.makeText(getApplicationContext(), "NATIONAL CODE "+nationalcode, Toast.LENGTH_SHORT).show(); 
        openAddPersonActivity(nationalcode); 

       } 
      }); 

希望它能幫助。

+0

您的解決方案不起作用,我不知道 –

+0

是否能夠看到烤麪包。 – Sreyas

+0

不,我不能 –

1

試試這個:

openAddPersonActivity(countries.get(position).getNationalCode()); 

僅供參考,list.setOnItemClick不起作用

添加到您的ListAdapter這樣的:

holder.nationalCode.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(mainActivity,"Country Code = "+MainActivity.countries.get(position).getNationalCode(),Toast.LENGTH_SHORT).show(); 

     Intent i = new Intent(mainActivity, AddPerson.class); 
     if (nationalCode != null) 
      i.putExtra("nationalCode", nationalCode); 
      startActivity(i); 
     } 
    }); 

,如果您單擊列表視圖項國家代碼那麼它會檢測到;

+0

我沒有「國家」,很簡單,我真的在數據庫中存儲人員數據 –

+0

「國家」是你的ArrayList,你存儲你的數據 –

+0

謝謝你的解決方案 –

0

您尚未將國家/地區列表設置爲您的Listview適配器。

當您設置適配器時,請將國家列表傳遞給列表視圖適配器。

0

它成功地工作:

holder.nationalCode.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String nationalcode = (String) ((TextView) view.findViewById(R.id.nationalCode)).getText(); 
       Toast.makeText(mainActivity, "NATIONAL CODE " + nationalcode, Toast.LENGTH_SHORT).show(); 

      } 
     }); 
0

嘗試這個

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { Person person = countries.get(position); openAddPersonActivity(person.getNationalCode()); }

在onItemClickedListener
相關問題