2

ListActivity를 사용하여 SimpleCursorAdapter로 간단한 텍스트를 표시하여 데이터베이스에서 텍스트를 가져옵니다. 문제점을 디버그하려고 시도했으나 커서가 결과를 성공적으로 가져 오는 중 텍스트가 ListView에 표시되지 않는 것으로 나타났습니다.ListView에서 텍스트를 볼 수 없습니다.

다음은 ListActivity 코드입니다.

public class MyListActivity extends ListActivity{ 

    Cursor myCursor; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     myCursor = getData(); 
     startManagingCursor(myCursor); 

     ListAdapter myAdapter = new SimpleCursorAdapter(this, R.layout.display_details, myCursor, new String[]{MyDbHelper.ID_FIELD, MyDbHelper.NAME_FIELD}, new int[]{R.id.row_id, R.id.row_name}); 

     setListAdapter(myAdapter); 
    } 

    private Cursor getData() { 
     return MyDBHelper.getRoutes(); 
    } 


    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     routesCursor.close(); 
    } 
} 

와 다음은 ListView에

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 


    <TextView 
     android:id="@+id/row_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/row_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/row_id" 
     android:layout_toRightOf="@+id/row_id" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 


</RelativeLayout> 

의 각 행에 대한 나의 xml 파일 및 ListActivity 내 레이아웃입니다

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

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

    </ListView> 

</RelativeLayout> 

나에게 솔루션을 제공하십시오 다음과 같습니다. 미리 감사드립니다.

+0

당신은 "ROW_ID"또는 "ROW_NAME"또는 둘 모두를있는 텍스트 뷰를 표시되지 setListAdapter –

+0

후) (myAdapter.notifyDataSetChanged 시도 했습니까? – TheLittleNaruto

답변

1

이 코드는 문제 해결에 도움이 될 수 있습니다.

package com.example.getkontakdata; 

import java.util.ArrayList; 
import java.util.List; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.util.SparseBooleanArray; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnItemClickListener { 
List<String> name1 = new ArrayList<String>(); 
List<String> phno1 = new ArrayList<String>(); 
MyAdapter ma; 
Button select; 
CheckBox cb; 

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

    getAllCallLogs(this.getContentResolver()); 
    final ListView lv= (ListView) findViewById(R.id.lv); 
    cb = (CheckBox) findViewById(R.id.checkBox1); 

    ma = new MyAdapter(); 
    lv.setAdapter((ListAdapter) ma); 
    lv.setOnItemClickListener(this); 
    lv.setItemsCanFocus(false); 
    lv.setTextFilterEnabled(true); 

    // adding 
    select = (Button) findViewById(R.id.button1); 
    select.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      StringBuilder checkedcontacts= new StringBuilder(); 
      System.out.println(".............." + ma.mCheckStates.size()); 

      for(int i = 0; i < phno1.size(); i++) { 
       if(ma.mCheckStates.get(i) == true) { 
        checkedcontacts.append(phno1.get(i).toString()); 
        checkedcontacts.append(";"); 

       } else { 
        System.out.println(".. Not Checked ......" + phno1.get(i).toString()); 
       } 
      } 
     }  
    }); 
} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    // TODO Auto-generated method stub 
    ma.toggle(arg2); 
} 

public void getAllCallLogs(ContentResolver cr) { 
    Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
    while (phones.moveToNext()) { 
      String name=phones.getString 
        (phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = phones.getString 
        (phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      //System.out.println(".................." + phoneNumber); 
      name1.add(name); 
      phno1.add(phoneNumber); 
     } 
     phones.close(); 
} 

class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener { 
    private SparseBooleanArray mCheckStates; 
    //private SparseBooleanArray nCheckStates; 
    LayoutInflater mInflater; 
    TextView tv1,tv; 
    CheckBox cb; 
    MyAdapter() { 
     mCheckStates = new SparseBooleanArray(name1.size()); 
     mCheckStates = new SparseBooleanArray(phno1.size()); 
     mInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public String get(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return name1.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
    View vi=convertView; 
     if(convertView==null) 
     vi = mInflater.inflate(R.layout.row, null); 

     TextView tv= (TextView) vi.findViewById(R.id.textView1); 
     tv1= (TextView) vi.findViewById(R.id.textView2); 
     cb = (CheckBox) vi.findViewById(R.id.checkBox1); 

     tv.setText("Nama : "+ name1.get(position)); 
     tv1.setText("Nomor Kontak : "+ phno1.get(position)); 

     cb.setTag(position); 
     cb.setChecked(mCheckStates.get(position, false)); 
     cb.setOnCheckedChangeListener((OnCheckedChangeListener) this); 

     return vi; 
    } 
    public boolean isChecked(int position) { 
     return mCheckStates.get(position, false); 
    } 

    public void setChecked(int position, boolean isChecked) { 
     mCheckStates.put(position, isChecked); 
     System.out.println("hello..........."); 
     notifyDataSetChanged(); 
    } 

    public void toggle(int position) { 
     setChecked(position, !isChecked(position)); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     // TODO Auto-generated method stub 
     mCheckStates.put((Integer) buttonView.getTag(), isChecked);  
    } 
} 
} 
관련 문제