親愛なるStackOverflowコミュニティ、私はいくつかの助けを求めることができますか?新しいアクティビティを開き、特定の子ビューにスクロールする方法は?
私は非常にアマチュアなコーダーであり、リファレンスドキュメントのアプリ版を開発しようとしており、検索可能にする必要があります。検索結果をドキュメントアクティビティにリンクして、ターゲットテキストまでスクロールダウンすることはできません。
私は、コーディネーターのレイアウト内のスクロールビューでドキュメントを表示するMainActivityを持っています。したがって、フローティングアクションボタンを使用できます。 content_mainレイアウトの一番上に、smoothScrollToを使ってスクロールビューの特定の子ビュー(セクション見出し)までスクロールするボタンを作成しました。彼らは正常に動作します。
しかし、文書を検索する必要があります。 SearchActivityという名前のアクティビティで、リストビュー(www.androidhive.comの例)で検索結果を与えるArrayListを作成しました。私はlistview検索結果のクリックを使ってcontent_mainレイアウトを開き、特定の子ビューまでスクロールダウンする方法を試しています。 私はSO(Click on a TextView opens new activity and jumps to a specific id; Android New Intent start particular method)で提案されているアプローチを試してみましたが、どちらもうまくいきませんでした。私はそれを管理する方法がわかっている他の何かをオンラインで見つけることができません。誰も方法を提案することはできますか?ここで私が試した一つの方法です。これはアクティビティを開きますが、スクロールしません。
ご協力いただき、ありがとうございます。
MainActivity:
public class MainActivity extends AppCompatActivity {
Button buttonHeader3a, buttonHeader3b, buttonHeader3c, buttonHeader3d;
ScrollView myView;
TextView myTV;
TextView hdr3a, hdr3b, hdr3c, hdr3d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, SearchActivity.class);
startActivity(i);
}
});
buttonHeader3a = (Button) findViewById(R.id.b1);
buttonHeader3b = (Button) findViewById(R.id.b2);
buttonHeader3c = (Button) findViewById(R.id.b3);
buttonHeader3d = (Button) findViewById(R.id.b4);
myView = (ScrollView) findViewById(R.id.myview);
myTV = (TextView) findViewById(R.id.ch3p16);
hdr3a = (TextView) findViewById(R.id.header3a); //hdr = header
hdr3b = (TextView) findViewById(R.id.header3b);
hdr3c = (TextView) findViewById(R.id.header3c);
hdr3d = (TextView) findViewById(R.id.header3d);
buttonHeader3a.setOnClickListener(new Button.OnClickListener() {
public final void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
myView.smoothScrollTo(0, hdr3a.getTop());
}
});
}
});
buttonHeader3b.setOnClickListener(new Button.OnClickListener() {
public final void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
myView.smoothScrollTo(0, hdr3b.getTop());
}
});
}
});
buttonHeader3c.setOnClickListener(new Button.OnClickListener() {
public final void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
myView.smoothScrollTo(0, hdr3c.getTop());
}
});
}
});
buttonHeader3d.setOnClickListener(new Button.OnClickListener() {
public final void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
myView.smoothScrollTo(0, hdr3d.getTop());
}
});
}
});
}
public void onButtonLinkPrealerting (View v) {
if (v.getId() == R.id.buttonLinkPrealerting) {
Intent i = new Intent(MainActivity.this, Chapter4.class);
startActivity(i);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// Here's where i'm trying to pick up an intent in SearchActivity and scroll down
@Override
protected void onNewIntent (Intent intent) {
super.onNewIntent (intent);
if(intent.getStringExtra("methodName").equals("myMethod")) {
myView.post(new Runnable() {
@Override
public void run() {
myView.smoothScrollTo(0, hdr3a.getTop());
}
});
}
}
// similar methods to scroll to other sections...
}
SearchActivity:
public class SearchActivity extends Activity {
// List view
private ListView lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// Search EditText
EditText inputSearch;
// ArrayList for Listview
ArrayList<HashMap<String, String>> productList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
// Listview Data
String products[] = {
"first very long string",
"second very long string",
// Several other very long strings
};
lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
lv.setAdapter(adapter);
/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
SearchActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
lv.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String a = parent.getAdapter().getItem(position).toString();
if (a.equals"first very long string"))
{
Intent intent = new Intent();
intent.setClass (getBaseContext(), MainActivity.class);
intent.putExtra("methodName", "myMethod");
startActivity(intent);
}
else
if (a.equals"second very long string"))
// more of the same
}
});
}
}
それは完璧に動作します。どうもありがとうございました。 –