2015-03-02 109 views
0

對於ListView(我們可以在其中查找列表視圖的活動以及EditText)我使用的是AdapterView如何從意圖視圖傳遞意圖附加信息Android

當我們點擊ListView我們去的第二個活動,我想發送所選項目作爲額外的數據在intent。這個數據,那麼將在EditText

顯示的一個元素

我試過這段代碼,但它似乎沒有工作,它總是顯示EditText的默認值。

這裏是適配器視圖的代碼:

public class adapterq extends ArrayAdapter<Questionaire> implements OnClickListener { 
    Bitmap image; 
     EditText name; 

    public adapterq(Context context, ArrayList<Questionaire> questionaires) { 
     super(context, 0, questionaires); 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get the data item for this position 
     final Questionaire c = getItem(position);  
     // Check if an existing view is being reused, otherwise inflate the view 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.customquest, parent, false); 
     } 

    View convertView2 = LayoutInflater.from(getContext()).inflate(R.layout.activity_main, parent, false); 


     TextView q = (TextView) convertView.findViewById(R.id.textView1); 
name =  (EditText) convertView2.findViewById(R.id.editText1); 


     q.setText(c.getLabel()); 

     convertView.setOnClickListener(this); 

     return convertView; 
    } 
    @Override 
    public void onClick(View v) { 
      Intent intent = new Intent(); 

      intent.setClass(getContext(), Questions.class); 

     intent.putExtra("name", name.getText().toString()); 
      getContext().startActivity(intent); 

    } 


} 

這裏是主要活動的XML代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

tools:context="com.example.orange.v1.MainActivity" > 

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="270dp" 
    android:layout_height="250dp" 
    android:layout_alignLeft="@+id/textView1" 
    android:layout_below="@+id/textView1" 
    android:isScrollContainer="false" 
    android:layout_marginTop="16dp" > 

</ListView> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textView1" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="18dp" 

    android:text="User Identifier :" 
    android:textStyle="bold" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/textView2" 
    android:layout_below="@+id/textView2" 
    android:layout_marginTop="16dp" 
    android:text="Yass" 
    android:ems="10" > 

    <requestFocus /> 
</EditText> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/editText1" 
    android:layout_marginLeft="21dp" 
    android:layout_marginTop="36dp" 
    android:text="Questionaire Choice" 
    android:textStyle="bold" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/listView1" 
    android:layout_below="@+id/listView1" 
    android:layout_marginTop="26dp" 
    android:text="Select a category to start playing" /> 

隨着視圖的屏幕截圖:

enter image description here

回答

2

如何從意圖查看的Android

因爲EditText是convertView2佈局內傳遞一個Intent額外但點擊監聽器是在convertView做得一樣:的onClick

q.setText(c.getLabel()); 
convertView.setOnClickListener(this); 
convertView.setTag(convertView2); 

使用v參數要獲得點擊EditText值的方法:

@Override 
    public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.setClass(getContext(), Questions.class); 
      View view=(View)v.getTag(); 
      EditText edtName=(EditText)view.findViewById(R.id.editText1); 
      intent.putExtra("name", edtName.getText().toString()); 
      getContext().startActivity(intent); 

    } 
+0

我得到執行NullPointerException異常 – 2015-03-02 10:07:39

+0

當@ Strange90錯誤:看到我的編輯答案現在它會工作。以前的邏輯不工作,因爲EditText在'convertView2'裏面,但是點擊'convertView'的監聽器,然後onClick方法視圖參數返回'convertView'而不是convertView2 – 2015-03-02 10:12:31

+0

沒有錯誤,但總是通過EditText中的默認文本 – 2015-03-02 10:19:06

1

更新您的代碼如下:

public class adapterq extends ArrayAdapter<Questionaire> implements OnClickListener { 
Bitmap image; 
EditText name; 

public adapterq(Context context, ArrayList<Questionaire> questionaires, EditText name) { 
    super(context, 0, questionaires); 
    this.name=name; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Get the data item for this position 
    final Questionaire c = getItem(position);  
    // Check if an existing view is being reused, otherwise inflate the view 
    if (convertView == null) { 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.customquest, parent, false); 
    } 

TextView q = (TextView) convertView.findViewById(R.id.textView1); 


    q.setText(c.getLabel()); 

    convertView.setOnClickListener(this); 

    return convertView; 
} 

@Override 
public void onClick(View v) { 
     Intent intent = new Intent(); 

     intent.setClass(getContext(), Questions.class); 

    intent.putExtra("name", name.getText().toString()); 
     getContext().startActivity(intent); 

} 

}

,並通過名稱的實例,同時初始化一個ArrayAdapter

+0

嗯只是說聲明'EditText名稱'爲'final'而不是發佈整個代碼 – 2015-03-02 10:07:22

+0

也,onClickListener是在適配器內... – dudego 2015-03-02 10:08:32

+0

我無法從onClick函數訪問EditText名稱,謝謝 – 2015-03-02 10:10:26