亲爱的StackOverflow社区,我可以请求帮助吗?
我是一名非常业余的程序员,正在尝试开发参考文档的应用版本,并且需要可搜索。我无法将搜索结果链接回文档活动并向下滚动到目标文本。
我有一个MainActivity在协调器布局中的滚动视图中显示文档,所以我可以使用浮动操作按钮。在content_main布局的顶部,我创建了一些按钮,这些按钮将使用smoothScrollTo向下滚动到scrollview的特定子视图(部分标题)。他们工作正常。
但该文件需要可搜索。我创建了一个ArrayList,它在一个名为SearchActivity的活动中以列表视图(来自www.androidhive.com中的示例)提供搜索结果。我正在尝试研究如何在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
}
});
}
}
答案 0 :(得分:2)
如果我是你,我会将Select A.*, case when T1.Name=T2.Name and T1.Area=T2.Area then 'In T1 and T2 and Equal'
when T2.Name is null then 'In T1 Only'
when T1.Name is null then 'in T2 Only,omitted in T1'
when T1.Name = T2.Name and T1.Area<> T2.Area then 'In T1 and T2 Different area' from (
Select t1.*, T2.*
FROM table1 T1
LEFT JOIn table2 T2
on T1.Name = T2.Name and T1.Area = T2.Area
UNION
Select t1.*, T2.*
FROM table1 T1
RIGHT JOIN table2 T2
on T1.Name = T2.Name and T1.Area = T2.Area) A
(在MainActivity中)的逻辑移到onNewIntent
中。
根据文件,
处理onNewIntent()以通知片段管理器 状态未保存。如果你正在处理新的意图,可能会 更改片段状态,您希望确保调用 先来到这里的超级班。否则,如果你的状态 保存,但活动没有停止,你可以得到一个 onNewIntent()调用在onResume()之前发生并尝试进行 在该点执行片段操作将抛出IllegalStateException 因为片段管理器认为状态仍然存在。
因此,只需检查在创建活动时是否将数据传递给您的活动onCreate:
onCreate