2016-07-22 12 views
1

Androidスタジオを使用してメモを取っているノートを作成しています。私はメモを保存するためにSQLiteを使用しています。現在、MainActivityでは、すべてのノートがリストビューを使用して表示されます。私はメモのテキストの一部と、部分メモのテキストの下に作成されたタイトルと日付を含むコンテナを持つグリッドごとにグリッドパターンを表示します。どうすればいい?以下は、私が何を意味しているのかを示す絵です。その画像内の画像が部分的にノートのテキストの一部を表示すると想像してください。すべてのノートをグリッドパターンで表示するAndroidスタジオ

a busy cat http://c1.soft112.com/images/06/2e/htc-scribble/pad_screenshot_240x180.png

私は、グリッドビューを使用して、作成された部分ノートテキスト、タイトルと日付を構成する各グリッドにおける相対的なレイアウトを置きますか?また、部分テキストを単純なテキスト表示で保存するだけですか?

ありがとうございます!

答えて

0

はい - グリッド要素のビューを膨らませるアダプタでgetViewメソッドの次のListViewで、そこにあなたがRelativeLayoutを使用することができるようにアダプターを作成します。 TextViewは、1行のテキストだけでなく複雑なテキストにも使用できます。

グリッドまたはリストとして使用できるRecyclerViewを確認する場合は、動的に変更することができます(たとえば、小さな画面リストの場合は大きな画面グリッドの場合)。

public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     LayoutInflater vi; 
     vi = LayoutInflater.from(getContext()); 
     convertView = vi.inflate(R.layout.your_grid_view,null); 


    } 

    YourClassRepresentGridElement current=getItem(position); 
    /* in getItem you should get element from database or from 
     collection which was generated from database 
    */ 


    //here do work with your view set it an values from object 
    //example 
    ((TextView)convertView.findElementById("text")).setText(current.text.substring(0,20)); 

    //remember using findElementById on every getView is not good practice - read about holder 

    return convertView; 


} 
+0

からモデルクラスのリストを渡すのだろうか?それは少し不明です – Michael

0

ベースアダプタに

activity_mainを使用してみてください:YourString.substring(0、20)アダプタ内のgetViewメソッドの

例 -

あなたが部分的テキストが必要な場合は[文字列メソッドを使用します.xml:MainActivity.javaのレイアウト。このデモアプリケーションでは、ListViewのみが含まれています。

<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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

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

</RelativeLayout> 

layout_list_item.xml:リストビューに表示するリスト項目のレイアウト。このリストでは、各リスト項目にImageViewと2つのTextViewが表示されます。

<?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="match_parent" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp"> 

    <ImageView 
     android:id="@+id/ivIcon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/star1" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/tvTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      android:text="Title" /> 

     <TextView 
      android:id="@+id/tvDesc" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      android:text="Description" /> 
    </LinearLayout> 

</LinearLayout> 

ListData.javaをモデルクラスを作成します。このモデルクラスは、タイトルと説明のための2つのString型の値が含まれています。 imgResIdはリスト項目に画像を表示するためのものです。

package pcsalt.example.customlistviewdemo; 

/* 
* ListData class will hold data for displaying in ListView 
* */ 
public class ListData { 

     String Description; 
     String title; 
     int imgResId; 

     public String getDescription() { 
       return Description; 
     } 

     public void setDescription(String description) { 
       Description = description; 
     } 

     public String getTitle() { 
       return title; 
     } 

     public void setTitle(String title) { 
       this.title = title; 
     } 

     public int getImgResId() { 
       return imgResId; 
     } 

     public void setImgResId(int imgResId) { 
       this.imgResId = imgResId; 
     } 

} 

継承BaseAdapterと機能 MyBaseAdapter.javaに応じて変更します。layout_list_item.xmlレイアウトとリストビューアイテムを膨らませるためにカスタムBaseAdapterを作成します。 convertViewが既に初期化されているかどうか、このコードでは

package pcsalt.example.customlistviewdemo; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class MyBaseAdapter extends BaseAdapter { 

    ArrayList myList = new ArrayList(); 
    LayoutInflater inflater; 
    Context context; 


    public MyBaseAdapter(Context context, ArrayList myList) { 
     this.myList = myList; 
     this.context = context; 
     inflater = LayoutInflater.from(this.context); 
    } 

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

    @Override 
    public ListData getItem(int position) { 
     return myList.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     MyViewHolder mViewHolder; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.layout_list_item, parent, false); 
      mViewHolder = new MyViewHolder(convertView); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (MyViewHolder) convertView.getTag(); 
     } 

     ListData currentListData = getItem(position); 

     mViewHolder.tvTitle.setText(currentListData.getTitle()); 
     mViewHolder.tvDesc.setText(currentListData.getDescription()); 
     mViewHolder.ivIcon.setImageResource(currentListData.getImgResId()); 

     return convertView; 
    } 

    private class MyViewHolder { 
     TextView tvTitle, tvDesc; 
     ImageView ivIcon; 

     public MyViewHolder(View item) { 
      tvTitle = (TextView) item.findViewById(R.id.tvTitle); 
      tvDesc = (TextView) item.findViewById(R.id.tvDesc); 
      ivIcon = (ImageView) item.findViewById(R.id.ivIcon); 
     } 
    } 
} 



    if (convertView == null) { 
    convertView = inflater.inflate(R.layout.layout_list_item, parent, false); 
    mViewHolder = new MyViewHolder(convertView); 
    convertView.setTag(mViewHolder); 
} else { 
    mViewHolder = (MyViewHolder) convertView.getTag(); 
} 

は、我々がチェックされています。そうでない場合は、リストアイテムのレイアウトを拡張し、ViewHolderオブジェクトを作成してconvertViewのタグに保存します。 convertViewがすでに初期化されている場合は、convertViewタグからViewHolderのインスタンスを取得します。 これは、以前のリスト項目に対してすでにインスタンス化されていたメモリを再利用するために必要です。これが行われないと、リストに表示される新しい項目ごとに独自のメモリーがインスタンス化されます。そして、OutOfMemoryExceptionを引き起こす可能性があります。 移入BaseAdapter BaseAdapterにデータを移入するためにデータ で、私たちは、あなたがあなたの答えに最初の部分を言い替えるでしMainActivity.java

package pcsalt.example.customlistviewdemo; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class MainActivity extends Activity { 

    ListView lvDetail; 
    Context context = MainActivity.this; 
    ArrayList myList = new ArrayList(); 

    String[] title = new String[]{ 
      "Title 1", "Title 2", "Title 3", "Title 4", 
      "Title 5", "Title 6", "Title 7", "Title 8" 
    }; 
    String[] desc = new String[]{ 
      "Desc 1", "Desc 2", "Desc 3", "Desc 4", 
      "Desc 5", "Desc 6", "Desc 7", "Desc 8" 
    }; 
    int[] img = new int[]{ 
      R.drawable.star1, R.drawable.star2, R.drawable.star3, R.drawable.star4, 
      R.drawable.star5, R.drawable.star6, R.drawable.star7, R.drawable.star8 
    }; 

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

     lvDetail = (ListView) findViewById(R.id.lvCustomList); 
     // insert data into the list before setting the adapter 
     // otherwise it will generate NullPointerException - Obviously 
     getDataInList(); 
     lvDetail.setAdapter(new MyBaseAdapter(context, myList)); 
    } 

    private void getDataInList() { 
     for (int i = 0; i &lt; title.length; i++) { 
      // Create a new object for each list item 
      ListData ld = new ListData(); 
      ld.setTitle(title[i]); 
      ld.setDescription(desc[i]); 
      ld.setImgResId(img[i]); 
      // Add this object into the ArrayList myList 
      myList.add(ld); 
     } 
    } 

} 

https://github.com/krrishnaaaa/CustomListViewDemo

関連する問題