2017-09-05 1 views
0

最終的には、リストビュー(最終的にはリサイクルリストビュー)内のアイテムをクリックして、idを次のアクティビティに転送してデータベースから取得したいとします。リストアイテムにデータを保存する

私はCursorAdapter(サブクラス化)によって供給されるListViewを持っています。 CursorAdapter.bindView()でブレークポイントを設定すると、渡されたビューの型はTwoItemListItemなので、RecipeListItemにidを設定することはできません。ListView経由で次のアクティビティに情報を渡す必要があると思います.setOnItemClickListener()。ソースアクティビティで

、私はリストビューを取得し、アダプタを設定します。

 RecipeCursorAdapter adapter = new RecipeCursorAdapter(this, cur); 

     ListView listView = (ListView) findViewById(R.id.recipe_list_list); 
     listView.setAdapter(adapter); 

がRecipeCursorAdapter:

public class RecipeCursorAdapter extends CursorAdapter { 
    protected LayoutInflater cursorInflator; 

    public RecipeCursorAdapter(Context context, Cursor cursor){ 
     super(context, cursor, 0); 
     this.cursorInflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    // The newView method is used to inflate a new view and return it, 
    // you don't bind any data to the view at this point. 
    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent){ 
     return this.cursorInflator.inflate(R.layout.activity_recipe_list_item, parent, false); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor){ 
     // Find fields to populate in inflated template 
     TextView tvTitle = (TextView) view.findViewById(R.id.recipeListItemTitle); 
     TextView tvSubtitle = (TextView) view.findViewById(R.id.recipeListItemSubtitle); 

     // Extract properties from cursor 
     String name = cursor.getString(cursor.getColumnIndexOrThrow("name")); 
     String description = cursor.getString(cursor.getColumnIndexOrThrow("description")); 

     // Populate fields with extracted properties 
     tvTitle.setText(name); 
     tvSubtitle.setText(description); 
    } 
} 

activity_recip_list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/listPreferredItemHeight" 
    android:mode="twoLine" 
    android:orientation="horizontal" 
    tools:context="com.smadacm.reciperepo.RecipeListItem" > 
    <TextView 
     android:id="@+id/recipeListItemTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/recipeListItemSubtitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="10dp" 
     android:layout_below="@id/recipeListItemTitle" 
     android:layout_alignStart="@id/recipeListItemTitle" 
     android:textColor="@color/colorListSecondary" 
     android:textAppearance="?android:attr/textAppearanceListItemSecondary" /> 
</TwoLineListItem> 

RecipeListItem:

public class RecipeListItem extends AppCompatActivity { 
    protected int itemId; 

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

    public void setItemId(int id){ 
     this.itemId = id; 
    } 
    public int getItemId(){ 
     return this.itemId; 
    } 
} 

答えて

0

私は何かの機能に遭遇することができました。これが正しいかどうかはわかりませんが、私は訂正されています。私の主な活動で

、私はリスナーを追加しました:

 RecipeCursorAdapter adapter = new RecipeCursorAdapter(this, cur); 

     ListView listView = (ListView) findViewById(R.id.recipe_list_list); 
     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       int ii = 0; // A line on which I can set a breakpoint 
      } 
     }); 

私はのLinearLayoutを拡張する新しいクラスを追加しました。これは主に、単にスーパークラスを呼び出して、だけでなく、任意のデータを設定および取得するためのメソッドを追加します。

public class RecipeListItem extends LinearLayout { 
    protected int recipeId; 

    public RecipeListItem(Context context) { 
     super(context, (AttributeSet)null, 0, 0); 
    } 

    public RecipeListItem(Context context, AttributeSet attrs) { 
     super(context, attrs, 0, 0); 
    } 

    public RecipeListItem(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr, 0); 
    } 

    public RecipeListItem(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    public void setRecipeId(int id){ 
     this.recipeId = id; 
    } 
    public int getRecipeId(){ 
     return this.recipeId; 
    } 
} 

私はリスト項目を定義するためのLinearLayoutのサブクラスを使用:

最後に
<com.smadacm.reciperepo.widget.RecipeListItem xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    tools:context="com.smadacm.reciperepo.RecipeListItem" > 
    <TextView 
     android:id="@+id/recipeListItemTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView 
     android:id="@+id/recipeListItemSubtitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="10dp" 
     android:layout_below="@id/recipeListItemTitle" 
     android:layout_alignStart="@id/recipeListItemTitle" 
     android:textColor="@color/colorListSecondary" 
     android:textAppearance="?android:attr/textAppearanceListItemSecondary" /> 
</com.smadacm.reciperepo.widget.RecipeListItem> 

、私のCursorAdapterで、私は項目ごとにIDを設定しました:

@Override 
public void bindView(View viewRaw, Context context, Cursor cursor){ 
    RecipeListItem view = (RecipeListItem) viewRaw; 
    // Find fields to populate in inflated template 
    TextView tvTitle = (TextView) view.findViewById(R.id.recipeListItemTitle); 
    TextView tvSubtitle = (TextView) view.findViewById(R.id.recipeListItemSubtitle); 

    // Extract properties from cursor 
    String name = cursor.getString(cursor.getColumnIndexOrThrow("name")); 
    String description = cursor.getString(cursor.getColumnIndexOrThrow("description")); 
    int id = cursor.getInt(cursor.getColumnIndexOrThrow("_id")); 

    // Populate fields with extracted properties 
    tvTitle.setText(name); 
    tvSubtitle.setText(description); 

    view.setRecipeId(id); 
} 
関連する問題