2013-10-28 36 views
0

列表视图布局充气我从ArrayList中的数据库完整的列值。但我想在列表视图中只显示消息和日期列。 我的代码:在Android电子

public class DisplayAllNotification extends Activity 

    { 
    ListView lv; 
    Context context; 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.notif); 

     lv = (ListView) findViewById(R.id.listView1); 
     SqlitenotifDb db = new SqlitenotifDb(getApplicationContext(), 
       "notifManager", null, 1); 

     ArrayList<NotificationData> lstString = new ArrayList<NotificationData>(); 
     lstString = db.getNotifications();// catch NotificationData obj 


     NotificationAdapter notificationAdapter = new NotificationAdapter(this, 
       android.R.layout.simple_list_item_1, lstString); 
     lv.setAdapter(notificationAdapter); 


     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, 
        long id) { 

        //on click want to display 2 columns in listview 
         } 
     }); 

    } 

NotificationAdapter.java 

    public class NotificationAdapter extends ArrayAdapter<NotificationData>{ 

    private Context context; 
    private int resource; 
    private ArrayList<NotificationData> objects; 

    public NotificationAdapter(Context context, int resource, 
      ArrayList<NotificationData> objects) 
    { 
     super(context, resource, objects); 
     // TODO Auto-generated constructor stub 
     this.resource = resource; 
     this.context = context; 
     this.objects = objects; 
    } 
} 
+0

您必须分享您的NotificationAdapter才能获得答案 – Devrim

回答

0

您正在使用一个ListView与自定义适配器遗漏了很多。我建议你阅读更多关于自定义适配器和listView的信息。总之,这里是一个完整的代码来解决你的问题:

res/layout下定义布局,并将其命名my_list_item.xml

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

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

</LinearLayout> 

你还没有实现你的自定义适配器。您可以使用下面的代码为您的适配器:

public class NotificationAdapter extends ArrayAdapter<NotificationData> { 

    private Context context; 
    private int resource; 
    private ArrayList<NotificationData> objects; 

    public NotificationAdapter(Context context, int resource, ArrayList<NotificationData> objects) { 
     super(context, resource, objects); 
     this.resource = resource; 
     this.context = context; 
     this.objects = objects; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView == null) { 
      View listRow = LayoutInflater.from(context).inflate(resource, null); 
      convertView = listRow; 
     } 

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

     NotificationData notificationData = getItem(position); 

     textView1.setText(notificationData.getMessage()); 
     textView2.setText(notificationData.getDate()); 
     return convertView; 
    } 

    @Override 
    public NotificationData getItem(int position) { 
     if (this.objects != null) { 
      return this.objects.get(position); 
     } else { 
      return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     if (this.objects != null) { 
      return this.objects.size(); 
     } else { 
      return 0; 
     } 
    } 
} 

最后你的活动改变这种代码的onCreate方法;

NotificationAdapter notificationAdapter = new NotificationAdapter(this, 
      android.R.layout.simple_list_item_1, lstString); 

NotificationAdapter notificationAdapter = new NotificationAdapter(this, 
      R.layout.my_list_item, lstString); 
+0

谢谢您为代码做了太多工作......它帮了我很多忙。 – user2769256

+0

我想从arraylist中检索列值以获取更多代码。你能指导我如何检索项目字段的值。 – user2769256

+0

您可以从您的NotificationData对象中检索任何值。你可以改变你的行my_list_item.xml和你的适配器来显示不同的值。 – Devrim

0

三种解决方案,选择一个。

1-假设NotificatioData类容纳所有columms。
定义只想要显示的colums另一个类。 从NotificationData
填充它传递数组适配器

2 - 从db.getNotifications()回报,只有要显示的colums一个阵列。

3 - 由于数据源是数据库使用一个CursorAdapter。在bindView方法绑定只有colums要在列表视图项。