2012-10-04 17 views
23

पर ध्यान केंद्रित नहीं करेगा ListView की प्रत्येक पंक्ति के अंदर मेरे पास EditText है। किसी कारण से, जब मैं एडिटटेक्स्ट को टैप करता हूं, तो यह संक्षेप में फोकस प्राप्त करता है लेकिन फिर तुरंत इसे खो देता है।ListView के अंदर एडिटटेक्स्ट

मुझे इन चीजों की कोशिश की है: EditText है

listView.setItemsCanFocus(true); 
editText.setFocusable(true); 


जबकि (संक्षेप में) ध्यान केंद्रित, Enter कुंजी का कहना है Next और auto-correct bar मौजूद है। जब यह फोकस खो देता है, तो सॉफ्ट कीबोर्ड रहता है, लेकिन Enter कुंजी Return Arrow बन जाती है, और auto-correct bar गायब हो जाता है।

+0

मुझे लगता है कि आप भूल गए हैं कि विचारों का पुनर्नवीनीकरण कैसे किया जाता है। सुझाव: सूची आइटम में संपादन टेक्स्ट का उपयोग न करें। – njzk2

+1

फोकस के लिए उन्हें रीसाइक्लिंग क्यों करना होगा? – Matt

+2

क्योंकि बहुत कम संपादन हैं जिन्हें प्रत्येक पंक्ति को चित्रित करने के लिए वैकल्पिक रूप से उपयोग किया जाता है, और वे – njzk2

उत्तर

8

EditText एस ListView एस के भीतर बेहद मुश्किल है। मेरा सुझाव है कि यदि आप संभव हो तो प्लेग की तरह उनसे बचें। जब मैं उनके साथ गड़बड़ कर रहा था, this answer हालांकि सहायक था। यदि आपके पास केवल कुछ आइटम हैं तो आप हमेशा ScrollView का उपयोग कर सकते हैं।

+0

हाँ, स्क्रोलव्यू के अंदर एक ऊर्ध्वाधर लाइनरलेआउट का उपयोग करके चाल चल रही थी। एक बात मैंने देखी है कि यदि यह एक सूची गतिविधि है, तो ListView में EditTexts ठीक काम करता है। लेकिन अगर यह नियमित गतिविधि में लिस्ट व्यू नहीं है। – Matt

+1

अगर हम उनसे बचें, तो प्रतिस्थापन क्या है? –

+0

"आप हमेशा स्क्रॉलव्यू का उपयोग कर सकते हैं" – dmon

0

मुझे पता है कि यह प्रश्न पुराना है, लेकिन मैं आज संपादन टेक्स्ट और लिस्ट व्यू के साथ भी लड़ रहा था। मुझे लगता है कि फोकस समस्या के साथ समय खोना या डेटासेट अपडेट करना लाइन का अंत है।

तो, मैंने एक गतिविधि बनाई और मुझे आवश्यक नियंत्रणों को गतिशील रूप से जोड़ा। इस उदाहरण में मैंने दो नियंत्रण जोड़े: एक टेक्स्टव्यू और एडिटेक्स्ट।

सबसे पहले मैं नियंत्रण के "कंटेनर" होने के लिए एक वर्ग बनाता हूं और मैंने नियंत्रण को स्क्रॉलव्यू पर रखा है।

layout.xml फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/llMain" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvHeader" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <ScrollView 
     android:id="@+id/svMain" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/llForm" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 

"containter" वर्ग:

import android.widget.EditText; 

public class RespostasArray { 

    private int pergunta; 
    private int formulario; 
    private int form_coord; 
    private int coordenada; 
    private int form_resposta; 
    private String questao; 
    private String resposta; 
    private EditText respostaEdit; 

    public RespostasArray() { 
     respostaEdit = null; 
    } 

    public int getPergunta() { 
     return pergunta; 
    } 

    public void setPergunta(int pergunta) { 
     this.pergunta = pergunta; 
    } 

    public int getFormulario() { 
     return formulario; 
    } 

    public void setFormulario(int formulario) { 
     this.formulario = formulario; 
    } 

    public int getForm_coord() { 
     return form_coord; 
    } 

    public void setForm_coord(int form_coord) { 
     this.form_coord = form_coord; 
    } 

    public int getCoordenada() { 
     return coordenada; 
    } 

    public void setCoordenada(int coordenada) { 
     this.coordenada = coordenada; 
    } 

    public int getForm_resposta() { 
     return form_resposta; 
    } 

    public void setForm_resposta(int form_resposta) { 
     this.form_resposta = form_resposta; 
    } 

    public String getQuestao() { 
     return questao; 
    } 

    public void setQuestao(String questao) { 
     this.questao = questao; 
    } 

    public String getResposta() { 
     return resposta; 
    } 

    public void setResposta(String resposta) { 
     this.resposta = resposta; 
    } 

    public EditText getRespostaEdit() { 
     return respostaEdit; 
    } 

    public void setRespostaEdit(EditText respostaEdit) { 
     this.respostaEdit = respostaEdit; 
    } 

} 

तो, मुख्य गतिविधि:

import java.util.ArrayList; 
    import java.util.List; 

    import jv.android.getpoint.R; 
    import jv.android.getpointlib.data.Formularios; 
    import jv.android.getpointlib.data.GetPointDataHelper; 
    import jv.android.getpointlib.data.Respostas; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.KeyEvent; 
    import android.view.WindowManager.LayoutParams; 
    import android.widget.EditText; 
    import android.widget.LinearLayout; 
    import android.widget.TextView; 

    public class RespostasActivity extends Activity { 

     private Intent intent; 
     private ArrayList<RespostasArray> listItems = null; 
     private GetPointDataHelper db = null; 
     private int coordenada = -1; 
     private int formulario = -1; 
     private LinearLayout llRespostas; 
     private TextView tvRespostasHeader; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.layout.xml); 

      llRespostas = (LinearLayout)findViewById(R.id.llRespostas); 
      tvHeader = (TextView)findViewById(R.id.tvHeader); 

      listItems = new ArrayList<RespostasArray>(); 
      db = new GetPointDataHelper(this, false); 

      intent = getIntent(); 

      if (intent != null) 
      { 
       Bundle params = intent.getExtras(); 

       if (params != null) { 
        coordenada = params.getInt("coordenada"); 
        formulario = params.getInt("formulario"); 

        tvHeader.setText("Some header"); 

// Load the fields I need from SQLite. Change it to your needs. 
        List<Respostas> respostas = db.selectAllRespostaDaCoordenada (coordenada, formulario); 

        if (respostas != null && respostas.size() > 0) { 
         for (int i = 0; i < respostas.size(); i++) { 
          TextView tv = new TextView(getApplicationContext()); 
          tv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
          tv.setText(respostas.get(i).getQuestao().trim() + (respostas.get(i).getQuestao().trim().endsWith(":") ? "" : ":")); 
          llRespostas.addView(tv); 

          EditText et = new EditText(getApplicationContext()); 
          et.setText(respostas.get(i).getResposta().trim()); 
          et.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));      
          llRespostas.addView(et); 

          RespostasArray ra = new RespostasArray(); 
          ra.setCoordenada(respostas.get(i).getCoordenada()); 
          ra.setForm_coord(respostas.get(i).getForm_coord()); 
          ra.setForm_resposta(respostas.get(i).getForm_resposta()); 
          ra.setFormulario(respostas.get(i).getFormulario()); 
          ra.setPergunta(respostas.get(i).getPergunta()); 
          ra.setQuestao(respostas.get(i).getQuestao()); 
          ra.setResposta(respostas.get(i).getResposta()); 
          ra.setRespostaEdit(et);      

          listItems.add(ra);      
         } 
        } 
       } 
      }    
     } 

     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) {  
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
       doProcessResult();   
      }  

      return super.onKeyDown(keyCode, event); 
     } 

     private void doProcessResult() { 
      for (int i = 0; i < listItems.size(); i++) { 
       if (listItems.get(i).getForm_resposta() == 0) { 
        db.insertResposta(listItems.get(i).getFormulario(), listItems.get(i).getForm_coord(), listItems.get(i).getPergunta(), listItems.get(i).getRespostaEdit().getText().toString()); 
       } else { 
        db.updateResposta(listItems.get(i).getForm_resposta(), listItems.get(i).getRespostaEdit().getText().toString());     
       } 
      } 
     } 
    } 

मुझे आशा है कि यह किसी को मदद मिलती है।

42

आप सूची के आइटम फ़ोकस लेना चाहते हैं, अपनी सुंदर सीधे आगे: सूचीदृश्य फ़ोकस करने योग्य नहीं है, और कहते हैं कि अपना ध्यान केंद्रित afterDescendants जो EditText रों की सुविधा देता है और अन्य फ़ोकस करने योग्य आइटम फ़ोकस लेना है।

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:descendantFocusability="afterDescendants" 
    android:focusable="false" /> 
+2

काम नहीं कर रहा प्रतीत होता है –

+1

यह मेरे लिए काम करता है ... धन्यवाद :) –

+0

आपके मूल्यवान उत्तर के लिए धन्यवाद :) – Subho