0

各アイテムがローカルHTMLファイル(WebView)を開いているカスタムListViewがあります。 WebViewへのListViewアイテムをクリックすると、アニメーションを追加するのに問題があります。ListViewのアイテムがWebViews - Transition Animationに展開されています

MainActivity.java

public class MainActivity extends AppCompatActivity { 

ListView listView; 

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

    listView = (ListView) findViewById(R.id.list); 


    String[] values = new String[] { "LINK 1", 
      "LINK 2", "LINK 3" 
    }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, android.R.id.text1, values) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      if (position==0||position==1||position==2) { 
       view.setBackgroundColor(Color.parseColor("#BBDEFB")); 
      } else { 
       view.setBackgroundColor(Color.parseColor("#006064")); 
      } 
      return view; 
     } 
    }; 

    listView.setAdapter(adapter); 
    //final HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); 



    **listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // TODO Auto-generated method stub 
      if (position == 0) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 0); 
       startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); 
      }else if (position == 1) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 1); 
       startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle() ); 
      }else if (position == 2) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 2); 
       startActivity(myIntent); 
      }** 



     } 

    }); 

をしかし、私は次のエラーを取得:

Error:(69, 60) error: no suitable method found for makeSceneTransitionAnimation(<anonymous OnItemClickListener>) 
method ActivityOptions.makeSceneTransitionAnimation(Activity,View,String) is not applicable 
(actual and formal argument lists differ in length) 
method ActivityOptions.makeSceneTransitionAnimation(Activity,Pair<View,String>...) is not applicable 
(actual argument <anonymous OnItemClickListener> cannot be converted to Activity by method invocation conversion) 

私の完全なコード:

を - :次のように私は startActivity()方法で ActivityOptions.makeSceneTransitionAnimation()方法を使用してみました

WebViewActivity.java

public class WebViewActivity extends AppCompatActivity { 
WebView webView; 

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

    webView = (WebView) findViewById(R.id.webView1); 
    //webView.setWebViewClient(new myWebClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    int pos = getIntent().getIntExtra("key", 0); 
    if (pos == 0) { 
     webView.loadUrl("file:///android_asset/index.html"); 
    } else if (pos == 1) { 
     webView.loadUrl("file:///android_asset/index2.html"); 
    } else if (pos == 2) { 
     webView.loadUrl("file:///android_asset/index3.html"); 
    } 

} 


} 

activity_main.xml

`

<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="com.example.a405146.listview.MainActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/list" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentTop="true" 
     android:background="?android:attr/selectableItemBackground"/> 
</RelativeLayout> 

`

activity_web_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<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="com.example.a405146.listview.WebViewActivity"> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</RelativeLayout> 

私はどこが間違っていたのか、移行を適切に実装する方法を理解してください。

答えて

0

listViewのすべてのビューに一意のtransitionNameを指定する必要があります。 getViewが呼び出されたときにアダプターでそれを行い、setTransitionNameを呼び出して、文字列と現在の位置の組み合わせなど、固有の名前を設定することができます。 GetViewメソッド

ViewCompat.setTransitionName(convertView, "list_item_"+position); 

の内側に、このようなものを書いて、次の活動に、あなたのWebView「sharedWebView」のようなもユニークなtransitionNameを与えます。次に、次のアクティビティを開始するときに、ビューのペアオブジェクトと、ビューが次のアクティビティになる名前を作成します。この

Pair<View, String> pair = Pair.create(view, "sharedWebView"); 

ような何か、あなたはまた、あなたがここに内部クラスへの参照を渡していること、活動を開始したときにそれを渡していますが、アクティビティの参照を渡す必要があります。このようなもの

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, pair).toBundle()); 
+0

ありがとう、私はこの回答から何を変えなければならないのか考えました! –

関連する問題