2016-03-20 2 views
1

私は1つの活性において2つの化合物を有する。私はButtononClick()を介して、最初から2番目のListViewまで選択した項目の値を転送したいと思います。以下の私のコードをご覧ください。最初のListViewの選択した値を2番目のListViewに転送するにはどうすればよいですか?

activity.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/linearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.edkul.vimal.edkul.Library"> 

    <TextView 
     android:id="@+id/textView27" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="Library" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="25sp" /> 


    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textView27" 
     android:layout_marginTop="35dp" 
     android:orientation="horizontal" 
     android:weightSum="2"> 

     <ListView 
      android:id="@+id/list_item1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:layout_weight="1" 
      android:background="#88FF0000" 
      android:padding="3dp"> 

     </ListView> 

     <LinearLayout 
      android:id="@+id/linearLayout3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:gravity="center_vertical|center_horizontal" 
      android:orientation="vertical" 
      android:padding="3dp" 
      android:weightSum="2"> 

      <Button 
       android:id="@+id/nextButton" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true" 
       android:layout_weight="1" 
       android:background="@drawable/circular_button" 
       android:drawableTop="@android:drawable/ic_media_next" /> 

      <Button 
       android:id="@+id/previousButton" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true" 
       android:layout_marginTop="10dp" 
       android:layout_weight="1" 
       android:background="@drawable/circular_button" 
       android:drawableTop="@android:drawable/ic_media_previous" /> 
     </LinearLayout> 

     <ListView 
      android:id="@+id/list_item3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</RelativeLayout> 

活動:

package com.edkul.vimal.edkul; 

import android.app.Activity; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.content.ContextCompat; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

public class Library extends Activity { 

    String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry","WebOS","Ubuntu","Windows7","Max OS X"}; 

    Button btn1,btn2; 
    ArrayAdapter adapter1,adapter2; 
    String[] data; 
    ListView listView1,listView2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_library); 

     listView1 = (ListView) findViewById(R.id.list_item1); 
     listView2 = (ListView) findViewById(R.id.list_item3); 

     adapter1 = new ArrayAdapter<String>(this, R.layout.activity_listview, mobileArray); 
     listView1.setAdapter(adapter1); 

     listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       String selectedFromList = (String) (listView1.getItemAtPosition(myItemInt)); 
       Log.v("Print Here", selectedFromList.toString()); 
       data[0] = selectedFromList.toString(); 
       adapter2 = new ArrayAdapter<String>(this, R.layout.activity_listview, data[0]); 
      } 
     }); 

     btn1 = (Button) findViewById(R.id.nextButton); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listView2.setAdapter(adapter2); 
      } 
     }); 
    } 

} 

Please refer the image for more explanation.

答えて

1

は次のように試してみてください。

listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       String clickedItem = mobileArray[postion]; 
       if(!arrayData.contains(clickedItem)) 
       arrayData.add(clickedItem); 
       String[] newitem = new String[arrayData.size()]; 
       arrayData.toArray(newitem); 
       adapter2 = new ArrayAdapter<String>(Library.this, android.R.layout.simple_list_item_1,android.R.id.text1, newitem); 
      } 
     }); 

ここarrayDataはあなたのリストの配列は、グローバルに定義されています。

List<String> arrayData = new ArrayList<String>(); 

は、次にボタンのクリックであなたのアダプタを設定します。

 btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listView2.setAdapter(adapter2); 
      } 
     }); 

希望これはあなたの問題を解決するのに役立ちます。

+0

私は、奇妙な質問ですが、私を助けてください助けてください。アダプター2 =新しいArrayAdapter (this、android.R.layout.simple_list_item_1、android.R.id .text1、newitem);コンストラクタを解決できません。 –

+0

@vimalmishra PositionはmyItemInt varialbeであり、positionに置き換えられます。 –

+0

@vimalmishraコードの変更を確認しましたか? –

1

いいえ。私はちょっとあなたが目指している行動を得るので、先に進んでコードを修正しました。後で私は何を持っています:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

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

public class MainActivity extends AppCompatActivity { 

    String[] mobileArray = {"Android", "IPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X"}; 
    List<String> mobileArray2 = new ArrayList<String>(); 
    String selectedText; 

    Button btn1, btn2; 
    ArrayAdapter adapter1, adapter2; 
    String[] data; 
    ListView listView1, listView2; 

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

     // Initialize stuff.. 
     listView1 = (ListView) findViewById(R.id.list_item1); 
     listView2 = (ListView) findViewById(R.id.list_item3); 
     btn1 = (Button) findViewById(R.id.nextButton); 

     adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mobileArray); 
     adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mobileArray2); 

     listView1.setAdapter(adapter1); 
     listView2.setAdapter(adapter2); 

     // Set set item click listener for first listview.. 
     listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       selectedText = (String) (listView1.getItemAtPosition(myItemInt)); 
       Log.v("Print Here", selectedText); 
      } 
     }); 

     // set click listener for button 1.. 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       sendToOtherListView(selectedText, listView2); 
      } 
     }); 
    } 

    // function that accepts the string to transfer and the listview to where it will be transferred. 
    private void sendToOtherListView(String strToTransfer, ListView lvDestination) { 
     // gets the adapter of the destination listview.. 
     ArrayAdapter<String> adapter = (ArrayAdapter<String>) lvDestination.getAdapter(); 

     // adds the string to transfer to the destination listview adapter. 
     adapter.add(strToTransfer); 
    } 

} 

これは単なる基本コードです。完全には最適化されていないし、すべてをガイドとして使用することができます。

つのヒントは、(あなたがそれらについてさらにを検索する必要があり、これらのヒントは、私が考えるだけで何であり、どのような私が欠落していたか、それは追加することができのこぎりは、ベスト・プラクティスと異なる場合があります):

  1. 私は(これは私が私がベストプラクティス、私はそれを見るだけの方法ではわからないところを参照しています一つです)鋳造の理由ではなくString[]よりList<String>を使用する方がはるかに簡単だと思います。

  2. NPEを回避するためにヌルチェッカーを追加します。

ほとんどすべては、例えば、setOnItemClickListenerのためのあなたのコードでは、あなたは、選択した項目を取得しString[]にそれを保存し、それを設定するよう..あなただけのデータ操作にもっと練習しなければならないと思い、大丈夫ですadapter2を値として使用しますが、ボタンをクリックすると2番目のListViewのアダプタのみを設定します。簡単な方法は、私が提供したサンプルコードのようなものです。選択した項目テキストをString変数に保存してから、ボタンをクリックするだけで、転送(アダプタの設定/アダプタへの値の追加)不要な処置が行われます。

ListViewの詳細については、hereをチェックしてください。

これは何とか役立ちます。幸運と幸せなコーディング。 :)

+0

ありがとう!それは本当にうまく説明してくれました。改善のためにコーディングに取り組んでいきます。 –

+0

@vimalmishra正解は1つのみ選択できます。あなたが最も役に立つと思うものを選んでください。私たちの評判が変化し続ける(混乱している)場合は混乱します。詳細については、[回答を受け入れる方法](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を参照してください。 –

関連する問題